可能是最好的方法-假设您不能使用scottod提供的NOPASSWD解决方案,那就是将Mircea Vutcovici的解决方案与Ansible Vault结合使用。
例如,您可能有一个类似这样的剧本:
- 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