如何在 ansible 主机文件中隐藏密码

如何在 ansible 主机文件中隐藏密码

我有一些 Windows 主机配置了 WinRM,以便让 Ansible 连接它们。不像 Linux 主机可以执行 ssh-copy-id 来避免输入凭据,我必须将我的管理员密码放在 /etc/ansible/host 中才能连接这些 Windows 机器:

cat /etc/ansible/hosts

[win]
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4

[win:vars]
ansible_user= administrator
ansible_password=mypasswd
ansible_port=5986
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore

有什么方法可以避免在 hosts 文件中出现纯文本密码?

我对 Ansible 还很陌生,非常感谢任何帮助!

答案1

决定您想要在运行 Ansible 的机器上使用什么来进行秘密管理。

查找插件从某个系统获取数据。ansible-doc -t lookup --list 查看列表,与机密相关的内容往往在名称中包含“pass”或“secret”。或“keyring”,它包装了本地操作系统机密存储(GNOME 机密服务、KDE ​​kwallet)。

配置任何秘密系统后,使用查找表达式在 Ansible 中引用它:

ansible_password="{{ lookup('keyring', secret_name) }}"

另一个选择是ansible-vault,集成文件加密实用程序。(请注意,这与 HashiCorp vault 不同,如果您有,您可以使用它的查找插件。)为此,您可以加密库存文件,或者将机密放入单独的 vars 文件中。


额外提示:/etc/ansible/hosts仅仅是默认的库存文件。您可以在 ansible.cfg 中更改默认库存文件。或者在命令行上使用 with-i选项提供一个。这样,您就可以在主目录中拥有库存,并且可以在不触及特权目录的情况下对其进行编辑。

答案2

这就是 ansible-vault 的用途(正如 Ron Trunk 已经提到的)

处理此问题的一种方法是像这样更改示例条目:

[win:vars]
ansible_user= administrator
ansible_password={{Vault_Windows_admin_password}}
ansible_port=5986

然后,在你的保险库里

Vault_windows_admin_password: VerySecretPasswordHere

你真的应该看看https://docs.ansible.com/ansible/latest/user_guide/vault.html

相关内容