You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash脚本中向vault-id传递Ansible Vault密码?

解决方案

方法一:通过进程替换直接传递密码

输入一次密码后,用Shell进程替换将密码传递给每个ansible-playbook命令,全程不会在磁盘存储密码文件:

# 隐藏式读取密码(-s参数避免输入内容显示在终端)
read -s -p "请输入Ansible Vault密码: " vault_password
echo  # 换行,避免后续命令和输入提示挤在一起

# 执行第一个Playbook
ansible-playbook check_patch_applied.yml \
  --extra-vars="target=123 patch_number=232323" \
  -v \
  --vault-id @<(echo "$vault_password")

# 执行第二个Playbook
ansible-playbook apply_patch.yml \
  --extra-vars="target=np026 patch_number=232323" \
  -v \
  --vault-id @<(echo "$vault_password")

方法二:利用环境变量统一配置(更简洁)

通过设置ANSIBLE_VAULT_PASSWORD_FILE环境变量,让所有后续ansible-playbook命令自动复用同一个密码源,无需重复添加--vault-id参数:

read -s -p "请输入Ansible Vault密码: " vault_password
echo

# 将进程替换的结果作为密码文件源
export ANSIBLE_VAULT_PASSWORD_FILE=<(echo "$vault_password")

# 后续执行Playbook无需再指定密码参数
ansible-playbook check_patch_applied.yml --extra-vars="target=123 patch_number=232323" -v
ansible-playbook apply_patch.yml --extra-vars="target=np026 patch_number=232323" -v

你之前的语法错误原因

  1. 进程替换格式错误:你写的< (echo ...)中间有空格,Shell进程替换要求<(必须连在一起,不能有空格,这是导致unexpected token '('报错的核心原因。
  2. 参数混用错误:第二种写法同时使用了@prompt和进程替换,@prompt是让Ansible主动弹出密码输入框,和进程替换的自动输入逻辑冲突,二者不能同时使用。
  3. 语法残留:第一种写法末尾多了一个无关的单引号,导致Shell解析失败。

内容的提问来源于stack exchange,提问作者AUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:44:56