sudo密码为单个组中的多个主机运行playbook

问题描述 投票:0回答:2

我们正在使用ansible,现在我们想在服务器(远程主机)上进行一些配置更改。我们在库存中的单个组中添加了多个服务器,每个服务器都有不同的密码。当我们运行playbook时,它要求输入sudo密码但我们无法传递单个服务器的密码,因为它对其他服务器来说是失败的。我们正在使用数字海洋云,所以没有.pem密钥文件选项。

能帮我解决一下如何为多个主机传递密码吗?它应该是安全的。

任何帮助或指导将不胜感激。提前致谢。

ansible
2个回答
1
投票

如果您需要为每个主机提供唯一的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
投票

在playbook中使用var_files并在那里存储密码和serverIP(如果安全使用py文件并获取密码和serverIP),然后使用gather_facts检查ipv4并将密码映射到该映射。然后你可以在主机中声明,成为等等。

© www.soinside.com 2019 - 2024. All rights reserved.