可能做到这一点的最好方法——假设你不能使用scottod提供的NOPASSWD解决方案——是将Mircea Vutcovici的解决方案与Ansible vault Archived结合使用。
例如,你可能有这样的剧本:
- 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放在这里。
例如:秘密:
ansible_sudo_pass: mysudopassword
保存并退出,现在你有一个加密的秘密文件,Ansible是能够解密时,你运行你的剧本。注意:您可以使用ansible-vault edit secret编辑文件(并输入创建文件时使用的密码)
谜题的最后一部分是为Ansible提供一个——vault-password-file,它将使用它来解密你的秘密文件。
创建一个名为vault.txt的文件,并在其中放入创建秘密文件时使用的密码。密码应该是存储在文件中的单行字符串。
来自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存档
https://docs.ansible.com/ansible/latest/user_guide/vault.html