sudo密码可为单个组中的多个主机运行剧本

时间:2019-04-26 10:21:40

标签: ansible

我们正在使用ansible,现在我们要在服务器(远程主机)上进行一些配置更改。我们在清单的单个组内添加了多个服务器,每个服务器都有不同的密码。当我们运行playbook时,它要求输入sudo密码,但我们无法传递单个服务器的密码,因为其他服务器将无法使用该密码。我们正在使用Digital Ocean云,因此没有.pem密钥文件选项。

能否请您帮我说明如何为多个主机传递密码? 应该以安全的方式进行。

任何帮助或指导将不胜感激。 预先感谢。

2 个答案:

答案 0 :(得分:0)

如果需要为每个主机提供唯一的sudo密码,则需要在清单或ansible_become_pass目录中的相应文件中设置host_vars

您显然不想以明文形式存储密码,因此我们可以使用ansible-vault来加密信息,以便在运行时提供的单个密码允许Ansible读取密码。


假设我们有一个包含三个主机serverserver2server3的清单,我们将首先确保在我们的剧本附近有一个host_vars目录:

mkdir host_vars

接下来,我们使用以下命令创建一个包含ansible_become_pass变量的加密文件:

ansible-vault create host_vars/server1.yml

这将提示我们输入保管库密码,然后在编辑器中打开文件。我们添加以下内容:

---
ansible_become_pass: secret1

针对server2server3执行相同的步骤,每次使用相同保险库密码(并将ansible_become_pass设置为唯一的sudo每个主机的密码)。现在,我们有了以下文件:

$ find . -type f
./playbook.yml
./host_vars/server2.yml
./host_vars/server3.yml
./host_vars/server1.yml

现在,我们将像这样运行剧本:

ansible-playbook playbook.yml --ask-vault-pass

这将提示我们输入保险库密码:

保险柜密码:

现在Ansible将能够升级目标主机上的特权。

答案 1 :(得分:-1)

在剧本中使用var_files并在其中存储密码和serverIP(如果可以的话,请使用py文件并获取密码和serverIP),然后使用collect_facts检查ipv4并将密码映射到该映射。然后,您可以声明在主机中,成​​为等等部分。