Вероятно, лучший способ сделать это - предполагая, что вы не можете использовать решение NOPASSWD, предоставляемое scottod, - это использовать решение Мирчи Вутковича в сочетании с хранилищем Ansible .
Например, у вас может быть что-то вроде книги:
- hosts: all
vars_files:
- secret
tasks:
- name: Do something as sudo
service: name=nginx state=restarted
sudo: yes
Здесь мы включаем файл с именем, secret
который будет содержать наш пароль sudo.
Мы будем использовать ansible-vault для создания зашифрованной версии этого файла:
ansible-vault create secret
Это попросит вас ввести пароль, а затем откройте редактор по умолчанию для редактирования файла. Вы можете поставить свой ansible_sudo_pass
здесь.
например secret
:
ansible_sudo_pass: mysudopassword
Сохраните и выйдите, теперь у вас есть зашифрованный secret
файл, который Ansible может расшифровать при запуске вашей книги воспроизведения. Примечание: вы можете отредактировать файл с помощью ansible-vault edit secret
(и ввести пароль, который вы использовали при создании файла)
Последняя часть головоломки - предоставить Ansible файл, --vault-password-file
который он будет использовать для расшифровки вашего secret
файла.
Создайте файл с именем vault.txt
и введите пароль, который вы использовали при создании secret
файла. Пароль должен быть строкой, хранящейся как одна строка в файле.
Из Ansible Docs:
.. убедитесь, что разрешения для файла таковы, что никто другой не может получить доступ к вашему ключу и не добавлять ваш ключ в систему контроля версий
Наконец: теперь вы можете запустить свою книгу с чем-то вроде
ansible-playbook playbook.yml -u someuser -i hosts --sudo --vault-password-file=vault.txt
Выше предполагается, что следующий макет каталога:
.
|_ playbook.yml
|_ secret
|_ hosts
|_ vault.txt
Вы можете прочитать больше о Ansible Vault здесь: https://docs.ansible.com/playbooks_vault.html