ansible 不提供独立的“密码文件解密”动作,而是通过 ansible-vault 对 yaml 变量文件加密,并在 playbook 运行时自动解密使用;需用 create 创建、vars_files 引入、--ask-vault-pass 或 --vault-password-file 解密执行。

在 Linux 中,Ansible 本身不提供“密码文件解密”这个独立动作——它只对加密的 YAML 文件(如 secrets.yml)做解密操作,且解密行为发生在运行时或通过专用命令触发。所谓“编写和使用密码文件解密”,实际是指:安全地创建加密变量文件 → 在 Playbook 中引用 → 执行时自动解密并使用其中的密码值。
下面分三步讲清楚怎么做,不绕弯、不堆术语:
怎么编写一个加密密码文件
用 ansible-vault create 命令新建一个带密码保护的变量文件,比如 vault_secrets.yml:
ansible-vault create vault_secrets.yml
输入两次密码后,编辑器自动打开。写入结构化内容(YAML 格式),例如:
--- db_password: "my-secret-db-pass-2026" admin_user: "admin" ssh_private_key: | -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAu... -----END RSA PRIVATE KEY-----
保存退出即完成——文件内容已 AES256 加密,用 cat vault_secrets.yml 看到的是乱码头 $ANSIBLE_VAULT;1.1;AES256...。
怎么在 Playbook 中使用它
Playbook 不需要额外解密指令,只要通过 vars_files 引入该文件,Ansible 运行时会自动解密并加载变量:
---
- name: Deploy app with secured credentials
hosts: webservers
become: true
vars_files:
- vault_secrets.yml # ← 这里就完成了“解密并加载”
tasks:
- name: Create database user
community.mysql.mysql_user:
name: "{{ admin_user }}"
password: "{{ db_password }}"
state: present
执行时带上解密方式即可:
-
交互式输密码:
ansible-playbook deploy.yml --ask-vault-pass
-
或用密码文件(推荐自动化场景):
echo "myvaultpass123" > .vault_pass chmod 600 .vault_pass ansible-playbook deploy.yml --vault-password-file .vault_pass
常见操作:查看、编辑、临时解密
-
查看内容(不落地明文):
ansible-vault view vault_secrets.yml
-
编辑内容(自动解密 → 编辑 → 保存再加密):
ansible-vault edit vault_secrets.yml
-
把加密文件临时转成明文(慎用!仅调试):
ansible-vault decrypt --output vault_secrets_plain.yml vault_secrets.yml # 用完立即删掉 vault_secrets_plain.yml
注意:不要加密 ansible.cfg 或 inventory 的主配置段(如 [defaults]),它们必须明文可读;敏感字段(如 ansible_ssh_pass)可挪到加密的 group_vars/all.yml 里统一管理。
不复杂但容易忽略。











