我有一些 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