如何避免 Ansible 上的 ask-vault-pass 参数

How to avoid ask-vault-pass parameter on Ansible

我想做类似的事情

ansible-playbook myPlaybook.yml -i myHostFile 

而不是

ansible-playbook myPlaybook.yml -i myHostFile --ask-vault-pass

您的要求不明确。根据我的评论,这个答案是一个具体的例子,说明如何使用 vault-keyring-client.py script provided by ansible community contribs 在你的 gnome linux 会话密钥环中保护你的保管库密码(希望它会给你一些关于如何解决你的问题的想法具体案例)。

  1. 确保您具有 运行 脚本所需的依赖项
    pip install keyring
    
  2. 将 contrib 脚本安装在您路径中的某个位置(给定的路径只是一个示例,请使用适合您情况的路径)
    cd $HOME/bin
    curl -o vault-keyring-client https://raw.githubusercontent.com/ansible-community/contrib-scripts/main/vault/vault-keyring-client.py
    chmod 0700 vault-keyring-client
    
  3. 使用脚本在您的会话密钥库中创建您的保管库 ID 密码。密码以交互方式询问并存储。您可以看到他们在启动 seahorse 后浏览 login 密钥环(即“密码和密钥”)。
    vault-keyring-client --set --vault-id yourid1
    vault-keyring-client --set --vault-id yourid2
    
  4. 配置 ansible 以便为这些 ID 使用该脚本。如果发现没有 id 的加密内容,将按顺序进行尝试。您可能想要定义一个默认 ID 来加密内容。将以下行添加到您的 .bashrc(或您使用的任何 shell...)
    export ANSIBLE_VAULT_IDENTITY_LIST=yourid1@$HOME/bin/vault-keyring-client,yourid2@$HOME/bin/vault-keyring-client
    export ANSIBLE_VAULT_ENCRYPT_IDENTITY=yourid1
    
  5. 加密一些内容
    # using the default encrypt vault-id
    ansible-vault encrypt somefile
    ansible-vault encrypt_string "somestring"
    # using an other vault-id than default
    ansible-vault encrypt --encrypt-vault-id yourid2 somefile
    ansible-vault encrypt_string --encrypt-vault-id yourid2 "somestring"
    
  6. 您现在可以使用任何需要从打开的会话中配置保管库密码的剧本或临时命令,而无需以交互方式提供
    ansible-playbook -i your_inventory your_playbook
    ansible-playbook -i your inventory somehost -m debug -a "msg={{ some_encrypted_var }}"