加密ansible清单文件
Encrypting ansible inventory file
我想使用 ansible vault 加密我的 ansible inventory 文件,因为它包含 IP/Passwords/Key 文件路径等,我不想以可读格式保存它。
这是我试过的。
我的文件夹结构如下所示
env/
hosts
hosts_details
plays/
test.yml
files/
vault_pass.txt
env/hosts
[server-a]
server-a-name
[server-b]
server-b-name
[webserver:children]
server-a
server-b
env/hosts_details(我要加密的文件)
[server-a:vars]
env_name=server-a
ansible_ssh_user=root
ansible_ssh_host=10.0.0.1
ansible_ssh_private_key_file=~/.ssh/xyz-key.pem
[server-b:vars]
env_name=server-b
ansible_ssh_user=root
ansible_ssh_host=10.0.0.2
ansible_ssh_private_key_file=~/.ssh/xyz-key.pem
test.yml
---
- hosts: webserver
tasks:
- name: Print Hello world
debug:
msg: "Hello World"
没有加密的执行成功运行,没有任何错误
ansible-playbook -i env/ test.yml
当我使用 files/vault_pass.txt 中的保险库文件加密我的 env/hosts_details 文件,然后执行剧本时,我得到以下错误
ansible-playbook -i env/ test.yml --vault-password-file files/vault_pass.txt
PLAY [webserver]
******************************************************************
TASK [setup]
*******************************************************************
Thursday 10 August 2017 11:21:01 +0100 (0:00:00.053) 0:00:00.053 *******
fatal: [server-a-name]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname server-a-name: Name or service not known\r\n", "unreachable": true}
fatal: [server-b-name]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname server-b-name: Name or service not known\r\n", "unreachable": true}
PLAY RECAP
*********************************************************************
server-a-name : ok=0 changed=0 unreachable=1 failed=0
server-b-name : ok=0 changed=0 unreachable=1 failed=0
我想知道我是否遗漏了任何东西,或者是否可以对库存文件进行加密。
是否有其他替代方案?
据我所知,您无法加密清单文件。
您应该改用组变量文件。
将您的变量以 YAML 格式放入 ./env/group_vars/server-a.yml
和 server-b.yml
:
env_name: server-a
ansible_ssh_user: root
ansible_ssh_host: 10.0.0.1
ansible_ssh_private_key_file: ~/.ssh/xyz-key.pem
并加密 server-a.yml
和 server-b.yml
。
这样您的清单(主机文件)将是纯文本,但所有清单(主机和组)变量都将被加密。
我想使用 ansible vault 加密我的 ansible inventory 文件,因为它包含 IP/Passwords/Key 文件路径等,我不想以可读格式保存它。
这是我试过的。
我的文件夹结构如下所示
env/
hosts
hosts_details
plays/
test.yml
files/
vault_pass.txt
env/hosts
[server-a]
server-a-name
[server-b]
server-b-name
[webserver:children]
server-a
server-b
env/hosts_details(我要加密的文件)
[server-a:vars]
env_name=server-a
ansible_ssh_user=root
ansible_ssh_host=10.0.0.1
ansible_ssh_private_key_file=~/.ssh/xyz-key.pem
[server-b:vars]
env_name=server-b
ansible_ssh_user=root
ansible_ssh_host=10.0.0.2
ansible_ssh_private_key_file=~/.ssh/xyz-key.pem
test.yml
---
- hosts: webserver
tasks:
- name: Print Hello world
debug:
msg: "Hello World"
没有加密的执行成功运行,没有任何错误
ansible-playbook -i env/ test.yml
当我使用 files/vault_pass.txt 中的保险库文件加密我的 env/hosts_details 文件,然后执行剧本时,我得到以下错误
ansible-playbook -i env/ test.yml --vault-password-file files/vault_pass.txt
PLAY [webserver]
******************************************************************
TASK [setup]
*******************************************************************
Thursday 10 August 2017 11:21:01 +0100 (0:00:00.053) 0:00:00.053 *******
fatal: [server-a-name]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname server-a-name: Name or service not known\r\n", "unreachable": true}
fatal: [server-b-name]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname server-b-name: Name or service not known\r\n", "unreachable": true}
PLAY RECAP
*********************************************************************
server-a-name : ok=0 changed=0 unreachable=1 failed=0
server-b-name : ok=0 changed=0 unreachable=1 failed=0
我想知道我是否遗漏了任何东西,或者是否可以对库存文件进行加密。
是否有其他替代方案?
据我所知,您无法加密清单文件。
您应该改用组变量文件。
将您的变量以 YAML 格式放入 ./env/group_vars/server-a.yml
和 server-b.yml
:
env_name: server-a
ansible_ssh_user: root
ansible_ssh_host: 10.0.0.1
ansible_ssh_private_key_file: ~/.ssh/xyz-key.pem
并加密 server-a.yml
和 server-b.yml
。
这样您的清单(主机文件)将是纯文本,但所有清单(主机和组)变量都将被加密。