我如何指定一个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**
有办法吗?我希望尽可能地自动化我的项目部署。
你可以在剧本执行时传递它。语法是-
ansible-playbook -i inventory my.yml \
--extra-vars 'ansible_become_pass=YOUR-PASSWORD-HERE'
但出于安全考虑,这并不是一个好主意。最好使用可靠的拱顶
首先更新你的库存文件如下:
[cluster:vars]
k_ver="linux-image-4.13.0-26-generic"
ansible_user=vivek # ssh login user
ansible_become=yes # use sudo
ansible_become_method=sudo
ansible_become_pass='{{ my_cluser_sudo_pass }}'
[cluster]
www1
www2
www3
db1
db2
cache1
cache2
接下来,创建一个名为password的新加密数据文件。Yml,执行如下命令:
$ ansible-vault create passwd.yml
设置保险箱密码。在提供密码后,该工具将启动您用$ editor定义的任何编辑器。附加以下内容
my_cluser_sudo_pass: your_sudo_password_for_remote_servers
在vi/vim中保存并关闭文件。最后运行playbook如下:
$ ansible-playbook -i inventory --ask-vault-pass --extra-vars '@passwd.yml' my.yml
如何重新编辑我的加密文件
ansible-vault edit passwd.yml
如何更改加密文件的密码
ansible-vault rekey passwd.yml
五年过去了,我可以看出这仍然是一个非常相关的主题。有点像leucos的答案,我发现在我的情况下,只使用ansible工具(没有任何集中的身份验证,令牌或其他东西)。这假设您在所有服务器上都有相同的用户名和相同的公钥。如果你不这样做,当然你需要更具体,并在主机旁边添加相应的变量:
[all:vars]
ansible_ssh_user=ansible
ansible_ssh_private_key_file=home/user/.ssh/mykey
[group]
192.168.0.50 ansible_sudo_pass='{{ myserver_sudo }}'
ansible-vault create mypasswd.yml
ansible-vault edit mypasswd.yml
Add:
myserver_sudo: mysecretpassword
然后:
ansible-playbook -i inv.ini my_role.yml --ask-vault --extra-vars '@passwd.yml'
至少这样你就不用写更多指向密码的变量了。