如何使用vault为ansible中的一组主机提供SSH用户密码

如何使用vault为ansible中的一组主机提供SSH用户密码,ansible,ansible-inventory,ansible-vault,Ansible,Ansible Inventory,Ansible Vault,考虑到以下Ansible主机文件: [webservers] server1.example.com ansible_ssh_pass=1234567 server2.example.com ansible_ssh_pass=2345678 server3.example.com ansible_ssh_pass=3456789 我希望包含vault文件中的这些密码值,并创建一个hosts文件,如(我的目的是创建一个ini清单格式): 其中sss\u pass变量来自host\

考虑到以下Ansible
主机
文件:

[webservers]        
server1.example.com ansible_ssh_pass=1234567
server2.example.com ansible_ssh_pass=2345678
server3.example.com ansible_ssh_pass=3456789
我希望包含vault文件中的这些密码值,并创建一个
hosts
文件,如(我的目的是创建一个
ini
清单格式):

其中
sss\u pass
变量来自
host\u vars
文件夹中定义的Vault文件

相关的ansible文件夹结构如下所示:

playbook.yml
inventories/
  atlanta/
    group_vars/
    hosts
    host_vars/
      server1.example.com
      server2.example.com
      server3.example.com
但ansible在抱怨:

[WARNING]:  * Failed to parse /root/hsm-ansible-deploy/inventories/atlanta/hosts with ini plugin: /root/hsm-ansible-deploy/inventories/atlanta/hosts:18: Expected key=value host variable assignment, got: ssh_pass
  • 为什么我会出错
  • 如何将密码导入主机文件

正如@techraf所指出的,这只是一个语法问题。编写ini
hosts
文件的正确方法是:

[webservers]        
server1.example.com ansible_ssh_pass="{{ ssh_pass }}"
server2.example.com ansible_ssh_pass="{{ ssh_pass }}"
server3.example.com ansible_ssh_pass="{{ ssh_pass }}"
但是我还发现了一个更优雅的解决方案,
hosts
文件更优雅,在
hosts
中根本不提供
ansible\u ssh\u pass
变量:

[webservers]        
server1.example.com
server2.example.com
server3.example.com
并使用
组变量/all
在此处定义此变量:

---
ansible_ssh_pass: "{{ vault_ansible_ssh_pass }}"
其中,
vault\u ansible\u ssh\u pass
在每个主机机密保险存储文件中定义,如
host\u vars/server1.example.com

---
vault_ansible_ssh_pass: "my secret password"
然后使用
ansible vault
对这些文件进行加密:

ansible-vault encrypt inventories/atlanta/host_vars/server*/vault --vault-password-file ~/.vault_pass.txt

其中
~/.vault\u pass.txt
以明文形式包含ansible vault密码。

这是一个输入错误。空格字符是分隔符。使用引号或删除空格。 列出的问题与此无关。谢谢!内置语法错误。我还找到了另一个解决方案,其中
ansible\u ssh\u pass:“{{ssh\u pass}}”
实际上可以在
group\u vars
中定义,然后
hosts
文件更干净。好的,我重新表述了问题,并根据您的指示和我的发现给出了答案。谢谢为什么不在每个
host\u vars
文件中简单地将变量称为
ansible\u ssh\u pass
?这样,即使是组var也不需要。
ansible-vault encrypt inventories/atlanta/host_vars/server*/vault --vault-password-file ~/.vault_pass.txt