Как правильно реализовать работу Ansible по SSH?
Собсно сабж.
Вводные данные:
— Мой рабочий ПК с установленным на него Ansible. Для пользователя 'user1', под которым работаю, с помощью ssh-keygen сгенерирована пара ключей (без кодовой фразы) — id_rsa и id_rsa.pub.
— На сервера, на которых заведен такой же пользователь 'user1' (входит в группу sudoers), проброшен открытый ключ id_rsa.pub.
— Как результат — аутентификация «ssh 192.168.1.*» проходит по ключам (пароль не требуется).
На своем рабочем ПК прогоняю:
ansible all -m ping
приходит pong.
Иду дальше, хочу разом обновлять все сервера по типу дистрибутива — deb / rpm.
Обозначил их в /etc/ansible/hosts:
[deb:children] vms fileservers [rpm:children] gateway
Для deb создаю playbook «upgrade-deb-servers.yml» со следующим содержимым:
— — hosts: deb sudo: true tasks: — name: update packages apt: update_cache=yes — name: upgrade packages apt: upgrade=dist
Пробую прогнать:
ansible-playbook upgrade-deb-server.yml PLAY [deb] ******************************************************************** GATHERING FACTS *************************************************************** fatal: [192.168.1.230] => Missing sudo password fatal: [192.168.1.231] => Missing sudo password fatal: [192.168.1.232] => Missing sudo password fatal: [192.168.1.222] => Missing sudo password
Логично, просит пароль. Добавляю ключ -K (он же --ask-sudo-pass, запрашивает пароль для root удаленной машины):
ansible-playbook -K upgrade-deb-server.yml
Запрашивает пароль, ввожу:
sudo password: PLAY [deb] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.1.230] ok: [192.168.1.232] ok: [192.168.1.231] fatal: [192.168.1.222] => Incorrect sudo password… 192.168.1.222: ok=0 changed=0 unreachable=1 failed=0 192.168.1.230: ok=3 changed=0 unreachable=0 failed=0 192.168.1.231: ok=3 changed=0 unreachable=0 failed=0 192.168.1.232: ok=3 changed=0 unreachable=0 failed=0
Уже лучше, но на 192.168.1.222 у меня стоит другой пароль, поэтому введенный пароль не проходит.
Вопрос:
Как быть с хостом, у которого пароль к sudo отличается от других? (Запускать для него playbook отдельно? Или всё таки можно как-то обработать за один playbook в купе с остальными хостами?)
Как с точки зрения безопасности/удобства правильно реализовать работу Ansible по SSH?
Правильно ли я понял, что для работы Ansible подойдет только сгенерированные без кодовой фразы закрытый/открытый ключи через ssh-keygen?
По идеи, я могу сгенерировать пару ключей для root и раскидать их на сервера, но ведь с точки зрения безопасности за это можно дать себе и по рукам?
Вводные данные:
— Мой рабочий ПК с установленным на него Ansible. Для пользователя 'user1', под которым работаю, с помощью ssh-keygen сгенерирована пара ключей (без кодовой фразы) — id_rsa и id_rsa.pub.
— На сервера, на которых заведен такой же пользователь 'user1' (входит в группу sudoers), проброшен открытый ключ id_rsa.pub.
— Как результат — аутентификация «ssh 192.168.1.*» проходит по ключам (пароль не требуется).
На своем рабочем ПК прогоняю:
ansible all -m ping
приходит pong.
Иду дальше, хочу разом обновлять все сервера по типу дистрибутива — deb / rpm.
Обозначил их в /etc/ansible/hosts:
[deb:children] vms fileservers [rpm:children] gateway
Для deb создаю playbook «upgrade-deb-servers.yml» со следующим содержимым:
— — hosts: deb sudo: true tasks: — name: update packages apt: update_cache=yes — name: upgrade packages apt: upgrade=dist
Пробую прогнать:
ansible-playbook upgrade-deb-server.yml PLAY [deb] ******************************************************************** GATHERING FACTS *************************************************************** fatal: [192.168.1.230] => Missing sudo password fatal: [192.168.1.231] => Missing sudo password fatal: [192.168.1.232] => Missing sudo password fatal: [192.168.1.222] => Missing sudo password
Логично, просит пароль. Добавляю ключ -K (он же --ask-sudo-pass, запрашивает пароль для root удаленной машины):
ansible-playbook -K upgrade-deb-server.yml
Запрашивает пароль, ввожу:
sudo password: PLAY [deb] ******************************************************************** GATHERING FACTS *************************************************************** ok: [192.168.1.230] ok: [192.168.1.232] ok: [192.168.1.231] fatal: [192.168.1.222] => Incorrect sudo password… 192.168.1.222: ok=0 changed=0 unreachable=1 failed=0 192.168.1.230: ok=3 changed=0 unreachable=0 failed=0 192.168.1.231: ok=3 changed=0 unreachable=0 failed=0 192.168.1.232: ok=3 changed=0 unreachable=0 failed=0
Уже лучше, но на 192.168.1.222 у меня стоит другой пароль, поэтому введенный пароль не проходит.
Вопрос:
Как быть с хостом, у которого пароль к sudo отличается от других? (Запускать для него playbook отдельно? Или всё таки можно как-то обработать за один playbook в купе с остальными хостами?)
Как с точки зрения безопасности/удобства правильно реализовать работу Ansible по SSH?
Правильно ли я понял, что для работы Ansible подойдет только сгенерированные без кодовой фразы закрытый/открытый ключи через ssh-keygen?
По идеи, я могу сгенерировать пару ключей для root и раскидать их на сервера, но ведь с точки зрения безопасности за это можно дать себе и по рукам?
Похожие публикации
Ansible проблемы при написании первого плейбука?
Нет комментариев