Собсно сабж.
Вводные данные:
- Мой рабочий ПК с установленным на него 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 и раскидать их на сервера, но ведь с точки зрения безопасности за это можно дать себе и по рукам?