Ansible 安全管理敏感信息的核心方案是使用 Ansible Vault 加密变量文件或 inventory 中的密码字段,并优先采用 SSH 密钥认证与 sudo NOPASSWD 配置实现免密操作。

Ansible 本身不推荐在 Playbook 或 inventory 中明文写密码,但实际运维中常需安全地管理 SSH 密码、sudo 密码、API 密钥等敏感信息。核心方案是:**用 Ansible Vault 加密敏感字段 + 合理配置连接方式(优先免密 SSH)**。下面分三类常见场景说明做法。
用 Ansible Vault 加密变量文件
这是最标准、最推荐的方式。把密码类变量单独抽到 YAML 文件中,再用 ansible-vault 加密:
- 新建变量文件:
group_vars/webservers/vault.yml,内容如:mysql_root_password: "P@ssw0rd123"api_token: "a1b2c3d4e5f6" - 加密该文件:
ansible-vault encrypt group_vars/webservers/vault.yml,按提示输入密码(记牢!) - 在 Playbook 中引用:
vars_files: ["group_vars/webservers/vault.yml"] - 执行时加
--ask-vault-pass或用--vault-password-file指定密码文件
对 inventory 中的密码字段加密
如果必须用密码登录(例如某些老旧设备不支持密钥),可在 inventory 中用 ansible_ssh_pass,但需加密:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 在
/etc/ansible/hosts或自定义 inventory 文件中写:[legacy_servers]192.168.5.100 ansible_ssh_user=admin ansible_ssh_pass="{{ vault_legacy_pass }}" - 另建
host_vars/192.168.5.100/vault.yml,写:vault_legacy_pass: "real_password_here" - 用
ansible-vault encrypt加密这个vault.yml文件 - 运行时带上
--ask-vault-pass,Ansible 会自动解密并注入变量
避免密码:改用 SSH 密钥 + sudo NOPASSWD(更安全)
真正提升安全性的做法,是让 Ansible 完全不接触密码:
- 用
ssh-keygen和ssh-copy-id配置免密登录(控制节点 → 所有被控节点) - 在被控节点上为 Ansible 用户配置无密码 sudo 权限:
echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible - inventory 中只需写:
192.168.1.20 ansible_user=ansible ansible_become=yes ansible_become_method=sudo - 这样既绕过密码传输,又满足提权需求,比加密密码更彻底
不复杂但容易忽略:Vault 密码要存放在可信位置,且建议配合 ansible.cfg 中的 vault_identity_list 实现多密码策略;而密钥登录务必禁用 PasswordAuthentication yes 的 SSH 配置,否则等于留后门。

















