如何将 ansibleVault 密码作为额外变量传递?

r0r*_*n0a 6 ansible ansible-vault azure-pipelines

我能够使用另一种机制(Azure管道秘密功能)来加密变量,所以我想在那里保存一个ansible-vault密码(在Azure管道中)并将其作为额外的var传递给playbook执行。

请问可以吗?

我期待什么/如何期待的一个例子是

ansible-playbook --extra-vars "vault-password=${pipelinevariable}"
Run Code Online (Sandbox Code Playgroud)

Zei*_*tor 8

保管库密码不能作为额外变量传递。有多种方法可以提供它,文档中均介绍了这些方法:

基本上你的选择是:

  • 以交互方式提供它传递--ask-vault-pass选项
  • 通过以下任一方式从文件(静态或可执行文件)中读取它:
    1. --vault-password-file /path/to/vault在命令行上提供选项
    2. 设置ANSIBLE_VAULT_PASSWORD_FILE环境变量(例如export ANSIBLE_VAULT_PASSWORD_FILE=/path/to/vault)。

在上面的文档中还有很多东西需要学习,特别是如何使用带有 ID 的多个保管库密码,如何使用客户端脚本从密钥存储中检索密码......


Dav*_*ave 7

这些答案都不适合我。我确实从这里的帖子中找到了有效的答案。根据我所做的所有研究,您实际上无法将密码作为额外的变量传递并将其用作保管库密码。您必须将密码作为标准输入发送。诀窍是使用--vault-password-file=/bin/cat. 现在,当您通过 stdin 传递时,--vault-password-file将查找一个文件,但您正在传递一个程序,cat该程序将读取 stdin 的输入并使用它,而不是使用静态密码文件。下面是一个例子:

echo 'mYP4s5w0rd' | ansible-playbook -i ./inventory.ini ./settings.yaml --vault-password-file=/bin/cat
Run Code Online (Sandbox Code Playgroud)

这实际上是有效的,并且不会创建可以被某人捕获的静态文件。