ansible vault 是管理部署密码最直接、最可靠的方式,通过加密敏感信息存入代码仓库并在运行时解密,支持变量文件、inventory 文件、独立密钥文件及 jinja2 模板,但 ansible.cfg 不可加密;使用 ansible-vault create/edit 管理加密文件,playbook 中通过 vars_files 引入即可自动解密;运行时可通过 --ask-vault-pass 手动输入密码或 --vault-password-file 指定密码文件实现自动化。

Ansible Vault 是管理部署密码最直接、最可靠的方式。它不依赖外部工具或环境变量,而是把密码等敏感信息加密后存进代码仓库,运行时再安全解密——既满足自动化需求,又避免明文泄露。
哪些文件适合用 Vault 加密
部署密码通常出现在这几类文件中,全部支持 Vault 加密:
- 变量文件(group_vars/all.yml、host_vars/web.yml 等)
- Inventory 文件(inventory.ini 或 inventory.yml 中的
ansible_password、ansible_ssh_pass) - 独立密钥文件(如 db_creds.yml、api_tokens.yml)
- Jinja2 模板中嵌入的敏感值(需先加密整个 .j2 文件)
注意:ansible.cfg 不能加密,因为 Ansible 启动时必须读取它。可将其拆分为基础配置(保留明文)和敏感段落(移至加密变量文件中引用)。
创建和编辑加密密码文件
推荐用 ansible-vault create 新建专用密码文件,比如 deploy_secrets.yml:
ansible-vault create deploy_secrets.yml
输入密码后,编辑器自动打开,写入结构化内容:
--- db_password: "prod-db-2026!" admin_api_key: "sk_live_abc123def456" ssh_private_key: |- -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA... -----END RSA PRIVATE KEY-----
保存即加密。后续修改统一用:
ansible-vault edit deploy_secrets.yml
它会自动解密 → 打开编辑器 → 保存时重新加密,全程不落地明文。
在 Playbook 中安全调用密码
只需在 Playbook 中通过 vars_files 或 include_vars 引入加密文件,变量即可正常渲染:
- name: 部署应用到生产环境
hosts: prod_servers
vars_files:
- deploy_secrets.yml
tasks:
- name: 配置数据库连接
template:
src: db.conf.j2
dest: /etc/app/db.conf
# {{ db_password }} 在运行时自动解密并填充
无需在 Playbook 内做任何额外处理,Ansible 会在内存中完成解密。
运行时提供解密凭据
两种常用方式,按场景选择:
-
手动执行(开发/调试):加
--ask-vault-pass参数,命令行提示输入密码 -
自动化部署(CI/CD 或定时任务):用密码文件,例如
vault.pass,内容仅一行密码,并设权限chmod 600 vault.pass,然后运行:
ansible-playbook deploy.yml --vault-password-file vault.pass
密码文件路径也可通过 ANSIBLE_VAULT_PASSWORD_FILE 环境变量指定,便于集成进流水线。











