ansible vault 通过加密整个 yaml 变量文件实现敏感凭证安全管控,执行时仅在内存解密、不落地明文;支持加密变量文件、inventory 文件、专用凭据文件及 jinja2 模板,但 ansible.cfg 不可加密。

在 Linux 中用 Ansible Vault 加密敏感凭证,核心是“加密文件、运行解密、不落地明文”。它不是给单个密码加壳,而是把整个 YAML 变量文件变成密文存进 Git,执行时才在内存中还原——既满足自动化,又守住安全底线。
哪些文件该加密
Ansible Vault 支持加密以下几类实际存放凭证的文件:
-
变量文件:如
group_vars/prod.yml、host_vars/db01.yml,里面常有db_password、admin_token等 -
Inventory 文件:比如
inventory/production.ini中的ansible_ssh_pass或ansible_password -
专用凭据文件:单独建
secrets/db_creds.yml或secrets/api_keys.yml,结构清晰、权限好控 -
Jinja2 模板文件:含敏感值的
.j2模板(需整文件加密,不能只加密某字段)
注意:ansible.cfg 不能加密,但可把其中的敏感项(如 remote_user、private_key_file)移到加密变量文件里,再通过 vars_files 引入。
创建和管理加密文件
推荐用 ansible-vault create 新建专用文件,避免误操作:
- 新建加密文件:
ansible-vault create group_vars/prod/vault.yml,输入密码后自动打开编辑器 - 写入结构化内容(纯 YAML,不混注释或 playbook 逻辑):
---<br>db_password: "prod-db-2026!"<br>api_token: "sk_live_xxx"<br>ssh_private_key: |<br> -----BEGIN RSA PRIVATE KEY-----<br> MIIEowIBAAKCAQEA...<br> -----END RSA PRIVATE KEY-----
- 后续修改统一用:
ansible-vault edit group_vars/prod/vault.yml,它自动解密 → 编辑 → 保存时重加密,全程无明文落地 - 已有明文文件可批量加密:
ansible-vault encrypt group_vars/staging/*.yml
在 Playbook 中安全调用
加密文件本身不运行,只是被加载为变量。引入方式和普通变量文件完全一样,Ansible 会自动识别并解密:
- 静态加载(推荐):
vars_files:<br> - "group_vars/all/vault.yml"<br> - "group_vars/{{ env }}/vault.yml"
变量可在when、loop、hosts等任意上下文中使用 - 动态加载(按需):
- include_vars:<br> file: "group_vars/{{ target_env }}/vault.yml"
变量仅在当前 play 内有效 - 绝对避免:
vars:块内硬编码!vault |块——难维护、不可 diff、易出错
CI/CD 流水线中免交互运行
生产环境不能手动输密码,必须用非交互方式提供 Vault 密码:
- 在流水线中准备密码文件:
echo "my-vault-pass-2026" > /tmp/vault.pass && chmod 600 /tmp/vault.pass - 执行时指定:
ansible-playbook deploy.yml --vault-password-file /tmp/vault.pass - 更稳妥做法:从 CI 系统密钥管理功能(如 GitHub Secrets、GitLab CI Variables)注入密码,再写入临时文件,或直接设环境变量
ANSIBLE_VAULT_PASSWORD_FILE=/tmp/vault.pass - 多环境不同密码?用
--vault-id:ansible-playbook site.yml --vault-id dev@vault-dev.pass --vault-id prod@vault-prod.pass











