如何使用Ansible Vault从文件传递remote_user账号密码避免手动输入
实现方案
步骤1:创建加密的凭据存储文件
使用Ansible Vault创建加密的变量文件,避免明文存储密码,执行命令:ansible-vault create secrets.yml
执行后会提示你设置Vault的加密密码,设置完成后会自动打开编辑器,在里面写入以下内容:
# 远程SSH连接密码 ansible_ssh_pass: "你的实际SSH密码" # 远程sudo提权密码 ansible_become_pass: "你的实际sudo密码"
保存退出后,secrets.yml会被自动加密,不会泄露明文密码。
步骤2:改造Playbook引入加密变量文件
修改原有Playbook,增加vars_files配置引入刚才创建的加密凭据文件,修改后的Playbook如下:
- name: Sample playbook hosts: remotehosts remote_user: tom become: yes gather_facts: no # 新增:引入加密的凭据文件 vars_files: - secrets.yml tasks: - name: Ensure directory is present in remote hosts file: path=/usr/local/tom_dir state=directory - name: Copy the script to the remote hosts copy: src=sample_check.sh dest=/usr/local/tom_dir mode=0755
步骤3:执行Playbook的两种方式
方式1:单次执行仅输入Vault密码
执行命令时去掉原有的-k -K参数,替换为--ask-vault-pass参数,每次执行仅需要输入一次之前设置的Vault加密密码即可:ansible-playbook -i inventory.ini sample_playbook.yml --ask-vault-pass
方式2:完全免手动输入(适合自动化场景)
如果不需要每次输入任何密码,可以把Vault密码存储到一个只有当前用户可读的本地文件中:
- 创建Vault密码文件:
echo "你设置的Vault加密密码" > ~/.ansible_vault_pass - 严格设置文件权限避免泄露:
chmod 600 ~/.ansible_vault_pass - 执行Playbook时指定密码文件路径即可,无需输入任何密码:
ansible-playbook -i inventory.ini sample_playbook.yml --vault-password-file ~/.ansible_vault_pass
安全注意事项
- 存储Vault密码的本地文件必须设置600权限,仅限所属用户读写,禁止开放给其他用户访问
- 加密后的
secrets.yml可以正常提交到代码仓库,不会泄露明文凭据
内容的提问来源于stack exchange,提问作者Peter Parker
相关产品推荐
相关产品推荐

