MyTetra Share
Делитесь знаниями!
Как прописывать SSH-ключ пользователя для Ansible
Время создания: 27.11.2019 15:37
Автор: xintrea
Текстовые метки: ansible, пользователь, ssh, ssh-keygen, ssh-copt-id, ключ, сертификат, настройка
Раздел: Компьютер - Linux - Оркестрация - Ansible
Запись: xintrea/mytetra_syncro/master/base/1574858250ezjq52pg9a/text.html на raw.github.com

Во множестве руководств по Ansible неясно написано как и какого пользователя нужно прописать в конфигурации Ansible и какие ключи нужны на удаленных станциях/серверах, чтобы Ansible смог работать без ошибок и запросов паролей.


Механизм следующий.


Команды ansible и ansible-playbook работают под тем пользователем, под которым они запущены в консоли оркестратора. Это именно тот пользователь, под которым происходит вход в операционную систему оркестратора. То есть, это обычный локальный пользователь компьютера, на котором запускаются вышеуказанные команды. Предположим, что имя такого пользователя vasya.


Чтобы заходить на удаленные машины, пользователь vasya должен создать пару из закрытого/открытого RSA ключа. Это делается следующей командой:



$ ssh-keygen -t rsa



В результате в каталоге /home/vasya/.ssh будут созданы файлы ключей:



$ ~/.ssh$ ls -1

id_rsa

id_rsa.pub



Если предполагается, что команды Ansible будут выполняться под пользователем root удаленной машины, то пользователь vasya должен уметь заходить на удаленную машину как root по ssh. Чтобы можно было это делать без постоянного ввода пароля, нужно под пользователем vasya выполнить следующую команду:



$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@remoteHost



Где remoteHost - это адрес или имя удаленной машины. Данная команда вначале произведет попытку входа на удаленную машину под пользователем root удаленой машины. При этом она попросит ввод пароля пользователя root удаленной машины. При успешном вводе этого пароля, открытый RSA-ключ локального пользователя vasya будет передан на удаленную машину. При этом удаленная машина запомнит, что с этим сертификатом вход производился под пользоваталем root!


То есть удаленная машина будет считать, что владелец сертификата (т. е. пользователь vasya) знает пароль пользователя root этой удаленной машины, и в случае логина его как root, будет пропускать его без пароля.


Чтобы этот механизм работал, на некоторых дистибутивах Linux нужно проверить файлы конфигурации SSH-сервера. Это надо делать на удаленной машине. В файле /etc/ssh/sshd_config надо убрать комментарии перед строками RSAAuthentication yesPubkeyAuthentication yes и AuthorizedKeysFile .ssh/authorized_keys. После чего следует перезапустить SSH-сервер:



service ssh restart



или



service sshd restart



Чтобы Ansible знал, под каким пользователем коннектиться на удаленную машину, в конфиге Ansible надо прописать опцию:



sudo_user=root



После таких настроек можно проверить возможность работы Ansible на удаленной машине с помощью команды:



$ ansible -m ping all

mylinux | SUCCESS => {

   "changed": false,

   "ping": "pong"

}



Ответ pong для модуля ping одначает, что удаленная машина настроена для выполнения команд Ansible.


Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования