我如何指定一个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
sudo密码存储为名为ansible_sudo_pass的变量。
你可以通过以下几种方式设置这个变量:
对于每个主机,在您的目录hosts文件(inventory/<inventoryname>/hosts)中
[server]
10.0.0.0 ansible_sudo_pass=foobar
每个组,在您的库存组文件(inventory/<inventoryname>/groups)
[server:vars]
ansible_sudo_pass=foobar
每个组,在组vars中(group_vars/<groupname>/ansible.yml)
ansible_sudo_pass: "foobar"
每个组,加密(ansible-vault create group_vars/<groupname>/ansible.yml)
ansible_sudo_pass: "foobar"
一个更聪明的方法是将sudo密码存储在LastPass或KeePass等安全库中,然后使用-e@将其传递给ansible-playbook,但不是在实际文件中硬编码内容,您可以使用构造-e@<(…)在子shell中运行命令,并将其输出(STDOUT)重定向到匿名文件描述符,有效地将密码提供给-e@<(..)。
例子
$ ansible-playbook -i /tmp/hosts pb.yml \
-e@<(echo "ansible_sudo_pass: $(lpass show folder1/item1 --password)")
以上是做几件事,让我们分解一下。
Ansible-playbook -i /tmp/hosts pb. exeYml -显然运行一个剧本通过ansible-playbook
$(lpass show folder1/item1——password)"-执行LastPass CLI的lpass命令,获取要使用的密码
Echo "ansible_sudo_pass:…password…"-获取字符串'ansible_sudo_pass: '并将其与lpass提供的密码结合
-e@<(..) -将上述内容放在一起,并将<(…)的子shell连接为ansible-playbook使用的文件描述符。
进一步的改善
如果你不想每次都输入,你可以这样简单地输入。首先在你的.bashrc中创建一个别名,如下所示:
$ cat ~/.bashrc
alias asp='echo "ansible_sudo_pass: $(lpass show folder1/item1 --password)"'
现在你可以像这样运行你的剧本:
$ ansible-playbook -i /tmp/hosts pb.yml -e@<(asp)
参考文献
https://docs.ansible.com/ansible/2.4/ansible-playbook.html#cmdoption-ansible-playbook-e