Для авторизации на клиентских устройствах можно использовать 2 метода:
- Авторизация с использованием логина и пароля (рассматривалось в более ранней статье)
- Авторизация с помощью сертификата
Авторизация с помощью сертификата
Для того чтобы нам авторизоваться на клиентском устройстве с помощью сертификата нужно выполнить следующие действия:
- Создаём сертификат для пользователя на хосте, с установленным Ansible
- Распространяем этот сертификат на другие хосты
Создание пары ssh ключей
На хосте с установленным Ansible генерируем ключи для пользователя admin
(какой пользователь решаете сами). Естественно подразумевается, что и на клиентских устройствах тоже будет присутствовать этот пользователь. Т.е проще чтобы у вас клиентские устройства разворачивались уже с этим пользователем.
Для этого выполняем:
ssh-keygen
На все запросы просто нажимаем ENTER
.
В итоге получаем пару закрытого и открытого ключа в каталоге ~/.ssh/
ls ~/.ssh/
Доставка открытого ключа на клиентское устройство
Теперь надо полученный публичный ключ доставить на клиентские устройства, чтобы мы могла заходить на них без пароля с основного хоста Ansible.
Для этого выполняем:
ssh-copy-id admin@mylab-vm-2.dc2.my.local
где:
admin
- пользователь на клиентском устройствеmylab-vm-2.dc2.my.local
- наше клиентское устройство, на который мы копируем сертификат
Проверка
Теперь вы можете попытаться залогиниться с хоста Ansible на клиентское устройства. В идеале вы должны залогиниться без запроса пароля.
ssh mylab-vm-2.dc2.my.local
Теперь давайте проверим выполнив, команду Ansible, которая перезагрузит наше клиентское устройство:
ansible mylab-vm-2.dc2.my.local -a "sudo /sbin/reboot" -i inventory/static.yml
Sudo команды без пароля
Перезагрузка - это команда, выполняемая с наивысшими правами sudo
. Т.е Ansible пытается выполнить команду от sudo
, но сталкивается с проблемой что на клиентском устройстве для этого нужно ввести пароль.
Для того чтобы такого не происходило можно отключить запрос пароля для команд sudo
для пользователя admin
.
Для этого на клиентском устройстве:
sudo vim /etc/sudoers.d/admin
admin ALL=(ALL) NOPASSWD: ALL
Рекомендуется вместо ALL
прописывать конкретные команды, которые можно выполнять без запроса пароля.
Либо вы можете запускать команду ansible-playbook
и использованием опции --ask-become-pass
, которая приведёт к запросу пароля для sudo. Решать какой именно подход выбирать остаётся за вами.
Автоматизация всего этого
Для того чтобы не выполнять все эти действия на каждом хосте руками можно скачать готовый Ansible playbook c github.
Комментарии