我如何指定一个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**
有办法吗?我希望尽可能地自动化我的项目部署。
如果您正在使用密码管理器,您可以使用模块passwordstore,这使得这非常容易。
假设您将用户的sudo密码保存为pass as
服务器 1/用户
然后您可以像这样使用解密后的值
{{ lookup('community.general.passwordstore', 'Server1/User')}}"
我在我的清单中使用它:
---
servers:
hosts:
server1:
ansible_become_pass: "{{ lookup('community.general.passwordstore', 'Server1/User')}}"
请注意,您应该运行gpg-agent,这样您就不会在每次运行“成为”任务时看到pinentry提示。
你可以使用ansible vault,它会把你的密码编码成加密的vault。之后,你可以使用变量从金库在剧本。
ansible vault的一些文档:
http://docs.ansible.com/playbooks_vault.html
我们使用它作为每个环境的保险库。要编辑vault,我们有如下命令:
Ansible-vault编辑库存/生产/group_vars/all/vault
如果你想调用保险库变量,你必须使用ansible-playbook的参数如下:
Ansible-playbook -s——vault-password-file=~/.ansible_vault.password
是的,我们存储仓库密码在本地目录明文,但这不是更危险的存储根密码为每个系统。根密码在保险库文件中,或者您可以将它像sudoers文件一样用于您的用户/组。
我建议在服务器上使用sudoers文件。下面是组管理的示例:
%admin所有=(所有)NOPASSWD:所有