我们正在使用ansible,现在我们要在服务器(远程主机)上进行一些配置更改。我们在清单的单个组内添加了多个服务器,每个服务器都有不同的密码。当我们运行playbook时,它要求输入sudo密码,但我们无法传递单个服务器的密码,因为其他服务器将无法使用该密码。我们正在使用Digital Ocean云,因此没有.pem
密钥文件选项。
能否请您帮我说明如何为多个主机传递密码? 应该以安全的方式进行。
任何帮助或指导将不胜感激。 预先感谢。
答案 0 :(得分:0)
如果需要为每个主机提供唯一的sudo
密码,则需要在清单或ansible_become_pass
目录中的相应文件中设置host_vars
。
您显然不想以明文形式存储密码,因此我们可以使用ansible-vault来加密信息,以便在运行时提供的单个密码允许Ansible读取密码。
假设我们有一个包含三个主机server
,server2
和server3
的清单,我们将首先确保在我们的剧本附近有一个host_vars
目录:
mkdir host_vars
接下来,我们使用以下命令创建一个包含ansible_become_pass
变量的加密文件:
ansible-vault create host_vars/server1.yml
这将提示我们输入保管库密码,然后在编辑器中打开文件。我们添加以下内容:
---
ansible_become_pass: secret1
针对server2
和server3
执行相同的步骤,每次使用相同保险库密码(并将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并将密码映射到该映射。然后,您可以声明在主机中,成为等等部分。