我们正在使用ansible,现在我们想在服务器(远程主机)上进行一些配置更改。我们在库存中的单个组中添加了多个服务器,每个服务器都有不同的密码。当我们运行playbook时,它要求输入sudo密码但我们无法传递单个服务器的密码,因为它对其他服务器来说是失败的。我们正在使用数字海洋云,所以没有.pem
密钥文件选项。
能帮我解决一下如何为多个主机传递密码吗?它应该是安全的。
任何帮助或指导将不胜感激。提前致谢。
如果您需要为每个主机提供唯一的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将能够升级目标主机上的权限。
在playbook中使用var_files并在那里存储密码和serverIP(如果安全使用py文件并获取密码和serverIP),然后使用gather_facts检查ipv4并将密码映射到该映射。然后你可以在主机中声明,成为等等。