一、为什么要使用 ansible-vault¶
原笔记把 Vault 放在 Roles 之后介绍,核心目的很明确:
当主机清单、变量文件或其他敏感内容不适合明文保存时,可以用 ansible-vault 做加密处理。
笔记中列出的典型场景有:
hosts文件加密- 变量文件加密
这类内容一旦涉及账号、密码、地址或其他敏感配置,就不适合直接以明文方式长期保存。
二、如何加密 hosts 文件¶
原笔记给出的操作如下:
[root@oldboy01 roles01]# ansible-vault encrypt hosts
New Vault password: 123456
Confirm New Vault password: 123456
Encryption successful
加密完成之后,再查看文件内容时,就不再是普通文本,而是 Vault 密文。原笔记示例如下:
$ANSIBLE_VAULT;1.1;AES256
30313531646134386138656263666435346332633935303264626639663766313630353535316562
3434623138366638623461383837336534353638356530610a376230303539363731313939336363
65393233323535643537306535313033333537653965393138303562323339646332633836393461
...
这说明文件已经进入受 Vault 保护的状态,不能再按普通清单文件直接读取。
三、加密状态下如何继续使用 Ansible¶
文件被加密后,并不意味着不能继续执行自动化任务,而是要在运行时提供 Vault 密码。
原笔记给出了两个示例。
先测试连通性:
[root@oldboy01 roles01]# ansible all -m ping --ask-vault-pass
Vault password: 123456
192.168.1.22 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.1.21 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
再执行剧本检查:
[root@oldboy01 roles01]# ansible-playbook -C top.yml --ask-vault-pass
Vault password: 123456
...
...
这里的关键参数是 --ask-vault-pass。
只要运行时能正确提供密码,加密后的文件依然可以被正常解密并参与执行。
四、需要明文时如何解密¶
如果确实需要恢复为普通文本,原笔记中的操作如下:
[root@oldboy01 roles01]# ansible-vault decrypt hosts
Vault password:
Decryption successful
执行完成后,文件会重新变回明文格式。
五、小结¶
ansible-vault 的用法并不复杂,核心就是三步:
- 用
encrypt加密敏感文件 - 用
--ask-vault-pass在执行时提供密码 - 在必要时用
decrypt恢复明文
对于需要长期维护的 Ansible 项目来说,把敏感清单和变量纳入 Vault 管理,是比明文保存更稳妥的做法。