Развертывание сервера Ansible SSH Access Manager на ОС Linux CentOS 7 -------------------------------------------------------------------------------------------------------------------------------------------------------------- Все описанные ниже действия выполнялись под пользователем root -------------------------------------------------------------------------------------------------------------------------------------------------------------- Всем привет! Для реализации данного проекта мне потребовалось: 1) Обновить пакеты ОС Linux CentOS 7 до последней версии; 2) Прописать статические IP-адреса; ------------------------------------------------------------ По аналогии с пунктом 1 и 2, настроить VM(Client) ------------------------------------------------------------ 3) Установить необходимые пакеты/компоненты; 4) Сгенерировать ssh-ключи для пользователей и пример их использования; 5) Написание Playbook-ов; 6) Редактирование файла Hosts; 7) Тестирование Playbook-ов. -------------------------------------------------------------------------------------------------------------------------------------------------------------- Предисловие: ------------ Ansible — система управления конфигурациями, написанная на языке программирования Python, с использованием декларативного языка разметки для описания конфигураций. Применяется для автоматизации настройки и развёртывания программного обеспечения. ------------ SSH — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений. ------------ Nano - это консольный текстовый редактор для UNIX и Unix-подобных операционных систем, основанный на библиотеке curses и распространяемый под лицензией GNU GPL. ------------ NMTUI - это инструмент командной строки, который используется для настройки сети в системах Gnu / Linux. При запуске он вызывает графический текстовый интерфейс, который помогает пользователям легко и эффективно настраивать сетевые интерфейсы. ------------ Ключ SSH — это криптографический безопасный идентификатор. ------------ Playbook - это простой, целостный и воспроизводимый способ определить все действия, которые нужно автоматизировать. ------------ EPEL (Extra Packages for Enterprise Linux) ― это открытое бесплатное хранилище пакетов от Fedora. Оно содержит пакеты дополнительного программного обеспечения для Linux. Пакеты этого репозитория не конфликтуют с пакетами RHEL, поэтому этот репозиторий самый безопасный в использовании для CentOS. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 1) Перед началом выполнения каких-либо манипуляций, нужно выполнить подготовку ОС Linux CentOS 7. Для начала обновим пакеты системы. ------------ yum update -y && yum upgrade -y |#|#| Поиск и обновление пакетов системы -------------------------------------------------------------------------------------------------------------------------------------------------------------- 2) Также для избежания потери связи с АРМ/VM, нужно позаботиться о статической IP-адресации. Её можно настроить как на самой АРМ/VM, так и на самом сетевом устройстве. Статическую адресацию можно прописать с помощью инструмента командной строки nmtui. ------------ yum install -y NetworkManager-tui |#|#| Установка пакета nmtui для настройки сети на АРМ/VM ------------ Гайд по тому, как пользоваться инструментом nmtui, вы можете посмотреть в интернете. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 3) Установка необходимых пакетов/компонентов. ------------ yum install -y epel-release |#|#| Команда для подключения репозитория EPEL к OC ------------ yum install -y ansible |#|#| Команда для установки ПО Ansible ------------ cp /etc/ansible/hosts /etc/ansible/hosts.default |#|#| Команда для копирования файла "hosts" с новым именем "hosts.default" ------------ После создания копии файла "hosts", можете его полностью очистить, чтобы было удобнее в нем работать. -------------------------------------------------------------------------------------------------------------------------------------------------------------- 4) Генерация ssh-ключей для пользователей и их использование. ------------ Для того, чтобы пользоваться ПО Ansible, нужно обеспечить связь между самим сервером Ansible и клиентом. Для этого нужно создать ssh-ключи для пользователя root. Я буду использовать в данном примере ssh-ключи формата RSA, но можно создать и таких форматов как: - dsa - ecdsa - ecdsa-sk - ed25519 - ed25519-sk ------------ ssh-keygen -t rsa |#|#| Команда для генерации ssh-ключей формата RSA ------------ При генерации ключей с помощью компонента ssh-keygen, также можно будет задать пути сохраниния создаваемых ключей и назначить парольную фразу, которую нужно будет вводить для использования данного ключа. После выполнения данной команды, ключи "id_rsa" и "id_rsa.pub" можно будет найти по пути: /root/.ssh/id_rsa ------------ После того, как ssh-ключи были сгенерированы, их нужно разложить по местам. ------------ Открытый (публичный ключ id_rsa.pub) - используется для шифрования данных при обращении к серверу, находится у клиента(в нашем случае при обращении сервера Ansible к клиенту). ------------ Закрытый (секретный ключ id_rsa) - используется для расшифровки данных, он находится у того, кто будет подключаться к серверу(в нашем случае на сервере Ansible). ------------ cd /root/.ssh |#|#| Команда для перехода в каталог "/root/.ssh" ------------ ls |#|#| Команда для просмотра содержимого в каталоге "/root/.ssh" ------------ Ключ id_rsa является закрытым, он должен храниться у владельца, в нашем случае он будет лежать на сервере Ansible. Для удобства, его можно переместить в любое удобное место на сервере. ------------ Ключ id_rsa.pub является открытым/публичным, его нужно будет положить на клиентскую ВМ(VM(Client)) в каталог "/root/.ssh" с названием "authorized_keys". Для копирования публичного ключа, используем команду "ssh-copy-id". ------------ ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.10.10.10 |#|#| Команда для копирования ssh-ключа "id_rsa.pub", который находится в каталоге "/root/.ssh/" на VM(Client) с IP-адресом: 10.10.10.10 ------------ Теперь можно зайти на VM(Client) с IP-адресом 10.10.10.10, в каталог "/root/.ssh/" и увидеть, что в нём находится файл с названием "authorized_keys", внутри которого находится содержимое ключа "id_rsa.pub". ------------ После копирования публичного ключа, создайте папку любую папку в каталоге "/root/.ssh/" и положите туда ключи "id_rsa" и "id_rsa.pub". Это нужно для того, чтобы не перепутать ключи в дальнейшем, при генерации новых. При необходимости можно переименовать в "root" и "root.pub". ------------ После того, как ключ был скопирован на VM(Client), нужно поменять содержимое конфигурационного файла "sshd_config" на VM(Client). ------------ ssh root@10.10.10.10 |#|#| Команда для подключения к VM(Client) -------------------------------------------------------------------------------------------------------------------------------------------------------------- nano /etc/ssh/sshd_config |#|#| Команда для открытия конфигурационного файла "sshd_config" -------------------------------------------------------------------------------------------------------------------------------------------------------------- Файл sshd_config нужно привести к следующему виду: # $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication yes # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no #KerberosUseKuserok yes # GSSAPI options GSSAPIAuthentication yes GSSAPICleanupCredentials no #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no #GSSAPIEnablek5users no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. # WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several # problems. UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation sandbox #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path #Banner none # Accept locale-related environment variables AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server В нем лишь нужно заменить строку "PubkeyAuthentication no" на "PubkeyAuthentication yes" (при необходимости раскомментируйте строку). После внесения изменений, сохраняем файл и перезагружаем службу ssh. ------------ systemctl restart sshd |#|#| Команда для перезапуска службы ssh ------------ После внесения всех изменений, возвращаемся обратно на сервер Ansible и пытаемся подключиться к VM(Client) через закрытый ключ(root). В моем случае, все ключи я переместил в каталог "/root/.ssh/keys_root". ------------ Переименовал "id_rsa"="root" и "id_rsa.pub"="root.pub". ------------ mkdir /root/.ssh/keys_root |#|#| Команда для создания папки "keys_root" в каталоге "/root/.ssh/" ------------ mv /root/.ssh/id_rsa /root/.ssh/keys_root/ |#|#| Команда для перемещения файла "id_rsa" в каталог "/root/.ssh/keys_root/" mv /root/.ssh/id_rsa.pub /root/.ssh/keys_root/ |#|#| Команда для перемещения файла "id_rsa.pub" в каталог "/root/.ssh/keys_root/" ------------ mv /root/.ssh/keys_root/id_rsa /root/.ssh/keys_root/root |#|#| Команда для переименования ключа "id_rsa" в "root" mv /root/.ssh/keys_root/id_rsa.pub /root/.ssh/keys_root/root.pub |#|#| Команда для переименования ключа "id_rsa.pub" в "root.pub" ------------ ssh -i /root/.ssh/keys_root/root root@10.10.10.10 |#|#| Команда для входа на VM(Client) с помощью закрытого ключа "root" ------------ Если все сделали правильно, то после выполнения команды, вы должны подключиться на VM(Client). ------------ [root@server-ansible ~]# ssh -i /root/.ssh/keys_root/root root@10.10.10.10 Last login: Fri Jan 13 13:23:04 2023 from 10.10.10.11 |#|#| Пример успешного [root@VM(Client) ~]# |#|#| подключения к VM(Client) (10.10.10.11 - Адрес сервера Ansible) ------------ После успешного подключения к VM(Client), можно выключить вход по паролю. Для этого нужно подключиться к клиенту VM(Client), и в конфигурационном файле "ssh_config" поменять значение строки "PasswordAuthentication no" на "PasswordAuthentication yes" (при необходимости раскомментируйте строку). Пример конфигурационного файла прикладываю ниже: # $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH SyslogFacility AUTHPRIV #LogLevel INFO # Authentication: #LoginGraceTime 2m PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication no # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no #KerberosUseKuserok yes # GSSAPI options GSSAPIAuthentication yes GSSAPICleanupCredentials no #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no #GSSAPIEnablek5users no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. # WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several # problems. UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation sandbox #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path #Banner none # Accept locale-related environment variables AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server ------------ После внесения измений, сохрание конфигурационный файл и перезагрузите службу ssh. ------------ systemctl restart sshd |#|#| Команда для перезапуска службы ssh ------------ После всех выполненных действий, вернитесь на сервер Ansible и попробуйте подключиться к VM(Client) по паролю без ssh-ключа. Вас должна ждать неудача. Пример показан ниже: [root@server-ansible ~]# ssh root@10.10.10.10 root@10.10.10.10: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). [root@server-ansible ~]# Как видим, нам отказано в доступе. ------------ А подключение с помощью приватного ssh-ключа дает успех: [root@server-ansible ~]# ssh -i /root/.ssh/keys_root/root root@10.10.10.10 Last login: Fri Jan 13 13:23:04 2023 from 10.10.10.11 [root@VM(Client) ~]# -------------------------------------------------------------------------------------------------------------------------------------------------------------- 5) Написание playbook-ов. ------------ Ansible работает с помощью Playbook-ов, написанием которых мы сейчас и займемся. Плейбуки советую хранить в каталоге "/etc/ansible". ------------ Плейбук для OC CentOS 7, на создание администратора на VM(Client) и сразу же копирования публичного ключа создаваемого администратора в каталог "/home/Larry/.ssh" с названием "authorized_keys" на VM(Client): --- - hosts: CID become: true tasks: - name: Creating a user in the "Wheel" group user: name: Larry password: 123456789 shell: /bin/bash groups: wheel append: yes - name: Creating a ssh key user: name: Larry generate_ssh_key: yes ssh_key_bits: 2048 ssh_key_file: /root/.ssh/id_rsa - name: Copying the ssh key to the user directory authorized_key: user: Larry state: present key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" ... ------------ Также хотел бы отметить, что плейбук начинается с символов: "---", а заканчивается "...". Как и показано на примере выше. Также, формат файла плейбука должен быть: ".yml". Пример: admadd.yml ------------ На примере выше, было показано создание пользователя "Larry", с паролем "123456789", добавленного в группу пользователей "Wheel". В предпоследней строке плейбука прописывайте тот путь, где лежит закрытый ключ создаваемого пользователя. Для каждого пользователя генерацию ключа делайте заново, а чтобы ключи не перемешались, уже созданные и скопированные ключи складируйте в отдельные папки. ------------ Ключи для связи между сервером Ansible и клиентом(которые используются для пользователей "root"), можно использовать одни и те же, т.к. они не должны ни в коем случае распространяться среди пользователей компании/организации. ------------ Данные root-ssh-ключи играют больше техническую роль для сервера Ansible, а именно для создания новых пользователей на клиентских VM, адреса которых будут прописаны в дальнейшем на сервере Ansible в файле "hosts". ------------ Плейбук для OC CentOS 7, на создание пользователя на VM(Client) и сразу же копирования публичного ключа создаваемого пользователя в каталог "/home/Larry/.ssh" с названием "authorized_keys" на VM(Client): --- - hosts: CID become: true tasks: - name: Creating a user in the "Users" group user: name: Larry password: 123456789 shell: /bin/bash groups: users append: yes - name: Creating a ssh key user: name: Larry generate_ssh_key: yes ssh_key_bits: 2048 ssh_key_file: /root/.ssh/id_rsa - name: Copying the ssh key to the user directory authorized_key: user: Larry state: present key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" ... ------------ Плейбук для OC CentOS 7, на удаление файла "authorized_keys" у пользователя "Larry" из каталога "/home/Larry/.ssh/authorized_keys". Данный плейбук будет удобен для закрытия доступа по ssh-ключам, для тех пользователей, которые уволились или сменили свое место работы. Пример: --- - hosts: CID become: true tasks: - name: Removing ssh keys file: path: /home/Larry/.ssh/authorized_keys state: absent ... ------------ !!!После создания плейбуков, ОБЯЗАТЕЛЬНО сгенеринуйте ещё одну пару ключей для пользователя "Larry"!!! ------------ ssh-keygen -t rsa |#|#| Команда для генерации ssh-ключей формата RSA ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 6) Редактирование файла Hosts. ------------ Файл "hosts" взаимодействует с плейбуками. В нем указываются IP-адреса серверов, с которыми будут взаимодействовать плейбуки. Для удобства можно очистить файл "hosts" полностью, т.к. все что там написано все равно закомментировано. ------------ Пример заполнения файла "hosts": [Test] 10.10.10.10 ansible_user=root ansible_ssh_private_key_file=/root/.ssh/keys_root/root ------------ [Test] |#|#| Название группы IP-адресов ------------ 10.10.10.10 |#|#| IP-сервера клиента ------------ ansible_user=root |#|#| Пользователь под которым будет выполнен вход по ssh ------------ ansible_ssh_private_key_file=/root/.ssh/keys_root/root |#|#| Путь к закрытому ключу root ------------ Чтобы проверить работоспособность ssh-подключения через файл hosts, нужно выполнить следующую команду: ansible -i /etc/ansible/hosts -m ping all |#|#| Команда для проверки работоспособности ssh-подключения ------------ Результат успеха: [root@server-ansible ~]# ansible -i /etc/ansible/hosts -m ping all [DEPRECATION WARNING]: Distribution fedora 37 on host 10.10.10.10 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. 10.10.10.10 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 7) Тестирование Playbook-ов. ------------ ВНИМАНИЕ!!! ПЕРЕД ЗАПУСКОМ ПЛЕЙБУКА, ОБЯЗАТЕЛЬНО СГЕНЕРИРУЙТЕ НОВЫЕ КЛЮЧИ ДЛЯ НОВОГО ПОЛЬЗОВАТЕЛЯ!!! Для запуска плейбука выполните следующую команду: ------------ ansible-playbook /etc/ansible/admadd.yml -i hosts |#|#| Команда для запуска плейбука "admadd.yml"(который находится в каталоге "/etc/ansible/") на тех серверах, которые прописаны в файле "hosts"(в нашем случае 10.10.10.10) ------------ Результат успешного выполнения плейбука: [root@server-ansible ~]# ansible-playbook /etc/ansible/adminadd.yml -i /etc/ansible/hosts PLAY [CID] *********************************************************************************************************************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************************************************************************************************************** [DEPRECATION WARNING]: Distribution fedora 37 on host 10.10.10.10 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansible release will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. ok: [10.10.10.10] TASK [Creating a user in the "Wheel" group] ************************************************************************************************************************************************************************************************** [WARNING]: The value ******** (type int) in a string field was converted to '********' (type string). If this does not look like what you expect, quote the entire value to ensure it does not change. [WARNING]: The input password appears not to have been hashed. The 'password' argument must be encrypted for this module to work properly. changed: [10.10.10.10] TASK [Creating a ssh key] ******************************************************************************************************************************************************************************************************************** ok: [10.10.10.10] TASK [Copying the ssh key to the user directory] ********************************************************************************************************************************************************************************************* changed: [10.10.10.10] PLAY RECAP *********************************************************************************************************************************************************************************************************************************** 10.10.10.10 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ------------ После успешного выполнения плейбука, можете с сервера Ansible проверить работоспособность ssh-соединения к VM(Client) с помощью ssh-ключа(предназначенного) для пользователя "Larry". ------------ Пример: ssh -i /root/.ssh/id_rsa Larry@10.10.10.10 |#|#| Команда для подключения к VM(Client) по протоколу ssh, с помощью закрытого ssh-ключа(предназначенного для Larry), под пользователем Larry ------------ Пример успешного входа на VM(Client): [root@server-ansible ~]# ssh -i /root/.ssh/id_rsa Larry@10.10.10.10 Last login: Fri Jan 13 10:06:03 2023 from 10.10.10.11 [root@VM(Client) ~]# ------------ После тестирования, также в каталоге "/root/.ssh/" поздайте отдельную папку для пары ключей от учетной записи пользователя "Larry" и поместите их в неё, при необходимости переименуйте. Ключ "id_rsa" можете выдать пользователю "Larry") ---------------------------------------------------------------------------------------------------------------------------------------------------------------- На этом инструкция завершена! Спасибо за внимание!)