如何通过Ansible Vault自动传递become及SSH密码实现Playbook自动化?
解决Ansible Playbook通过Cron自动运行的凭据管理问题
首先纠正你一个关键误解:--vault-password-file参数指定的是用来解密Vault加密文件的密码文件,而非你创建的Credentials.yml加密文件本身。Credentials.yml是存储敏感变量的加密文件,需要用Vault密码来解密它。
1. 编写加密的Credentials.yml变量文件
Credentials.yml采用标准YAML格式,用来存储你的become密码和SSH密码变量:
# 加密前的明文内容(执行ansible-vault edit时输入) ansible_become_pass: "你的sudo/become密码" ansible_ssh_pass: "你的SSH登录密码"
如果已经创建了空的加密文件,可通过ansible-vault edit Credentials.yml命令输入Vault密码后,编辑上述内容保存。
2. 创建Vault密码文件(用于自动解密)
创建一个纯文本文件(比如~/.ansible_vault_pass),仅存储你加密Credentials.yml时设置的Vault密码,然后设置严格权限防止其他用户读取:
echo "你的Vault解密密码" > ~/.ansible_vault_pass chmod 600 ~/.ansible_vault_pass
3. 在Playbook中集成加密变量
有两种常用方式:
方式一:在Playbook中直接引入变量文件
修改BackupLogsX.yml,在开头添加vars_files字段:
--- - name: 日志备份Playbook hosts: all vars_files: - /path/to/Credentials.yml # 指向你的加密变量文件路径 tasks: # 你的任务内容...
方式二:命令行指定变量文件
若不想修改Playbook,运行时通过参数指定:
ansible-playbook --vault-password-file ~/.ansible_vault_pass --vars-file /path/to/Credentials.yml BackupLogsX.yml
4. 配置Cron Job实现自动运行
用crontab -e编辑定时任务,添加每周运行的规则(示例为每周日凌晨2点):
0 2 * * 0 /usr/bin/ansible-playbook --vault-password-file /home/你的用户名/.ansible_vault_pass --vars-file /path/to/Credentials.yml /path/to/BackupLogsX.yml >> /var/log/ansible_backup.log 2>&1
- 替换所有路径为实际路径,用户名改为你的系统用户名
- 追加日志输出便于后续排查问题
5. 安全注意事项
- 确保Vault密码文件权限为
600,仅当前用户可读取 - 禁止将加密的
Credentials.yml或Vault密码文件提交到版本控制系统 - 若服务器为多用户环境,优先使用SSH密钥替代密码登录,进一步提升安全性
内容的提问来源于stack exchange,提问作者Eridith
相关产品推荐
相关产品推荐

