我如何指定一个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**

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


当前回答

如果你愿意将密码保存在纯文本文件中,另一种选择是使用带有——extra-vars参数的JSON文件(确保将该文件排除在源代码控制之外):

ansible-playbook --extra-vars "@private_vars.json" playbook.yml 

Ansible从1.3开始就支持这个选项。

其他回答

使用ansible 2.4.1.0和以下应该工作:

[all]
17.26.131.10
17.26.131.11
17.26.131.12
17.26.131.13
17.26.131.14

[all:vars]
ansible_connection=ssh
ansible_user=per
ansible_ssh_pass=per
ansible_sudo_pass=per

然后用这个清单运行剧本:

ansible-playbook -i inventory copyTest.yml

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

become_pass =(“ansible_become_password”、“ansible_become_pass”)

查看代码(runner/__init__.py),我认为你可以将其设置在你的库存文件中:

[whatever]
some-host ansible_sudo_pass='foobar'

ansible.cfg配置文件中似乎也有一些规定,但现在还没有实现(constants.py)。

我不认为ansible会让你在标志中指定密码,因为你希望这样做。 可能在配置的某个地方可以设置这个,但这将使使用ansible整体不太安全,不建议使用。

您可以做的一件事是在目标计算机上创建一个用户,并向其授予所有命令或受限制的命令列表的无密码sudo特权。

如果你运行sudo visudo并输入如下一行,那么用户'privilegedUser'在运行sudo service xxxx start时应该不需要输入密码:

%privilegedUser ALL= NOPASSWD: /usr/bin/service

一个更聪明的方法是将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