我如何指定一个sudo密码Ansible在非交互的方式?

我是这样运行Ansible剧本的:

$ ansible-playbook playbook.yml -i inventory.ini \
    --user=username --ask-sudo-pass

但我想这样运行它:

$ ansible-playbook playbook.yml -i inventory.ini \
    --user=username` **--sudo-pass=12345**

有办法吗?我希望尽可能地自动化我的项目部署。


当前回答

你可以像这样在hosts文件中为你的剧本写sudo密码:

[host-group-name]
host-name:port ansible_sudo_pass='*your-sudo-password*'

其他回答

文档强烈建议不要将sudo密码设置为明文:

提醒一下,密码永远不应该以纯文本的形式存储。有关使用Ansible Vault加密您的密码和其他秘密的信息,请参见使用Ansible Vault加密内容。

相反,当运行ansible-playbook时,你应该在命令行上使用——ask-become-pass

之前版本的Ansible使用——ask-sudo-pass和sudo来代替become。

Ansible vault已经在这里被建议了几次,但我更喜欢git-crypt加密我的剧本中的敏感文件。如果你使用git来保存你的ansible playbook,这是一个snap。我发现ansible vault的问题是,我不可避免地会遇到我想要使用的文件的加密副本,在我工作之前必须解密它。git-crypt提供了一个更好的工作流程。

https://github.com/AGWA/git-crypt

使用这个,你可以把你的密码放在你的剧本的var中,并把你的剧本标记为一个加密文件。gitattributes,像这样:

 my_playbook.yml filter=git-crypt diff=git-crypt

你的剧本将在Github上透明加密。然后,您只需要在用于运行ansible的主机上安装加密密钥,或者按照文档上的说明使用gpg进行设置。

这里有一个关于像SSH -agent转发SSH密钥一样转发gpg密钥的很好的问答:https://superuser.com/questions/161973/how-can-i-forward-a-gpg-key-via-ssh-agent。

你可以像这样在hosts文件中为你的剧本写sudo密码:

[host-group-name]
host-name:port ansible_sudo_pass='*your-sudo-password*'

非常简单,只需在变量file中添加:

例子:

$ vim group_vars/all

加上这些:

Ansible_connection: ssh
Ansible_ssh_user: rafael
Ansible_ssh_pass: password123
Ansible_become_pass: password123

用——extra-vars "become_pass=Password"调用你的剧本

become_pass =(“ansible_become_password”、“ansible_become_pass”)