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

Alv*_*avo 3 ansible ansible-vault

我想做类似的事情

ansible-playbook myPlaybook.yml -i myHostFile 
Run Code Online (Sandbox Code Playgroud)

代替

ansible-playbook myPlaybook.yml -i myHostFile --ask-vault-pass
Run Code Online (Sandbox Code Playgroud)

Zei*_*tor 6

你的要求不明确。根据我的评论,这个答案是一个具体示例,说明如何使用vault-keyring-client.pyansible 社区 contribs 提供的脚本来保护 gnome linux 会话密钥环内的保管库密码(希望它能给您一些关于如何在特定情况下解决问题的想法) 。

  1. 确保您具有运行脚本所需的依赖项
    pip install keyring
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用脚本在会话密钥库中创建保管库 ID 密码。以交互方式询问密码并存储。login启动后您可以看到浏览密钥环的密码条目seahorse(即“密码和密钥”)。
    vault-keyring-client --set --vault-id yourid1
    vault-keyring-client --set --vault-id yourid2
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  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"
    
    Run Code Online (Sandbox Code Playgroud)
  6. 现在,您可以使用任何需要从打开的会话中配置保管库密码的 playbook 或临时命令,而无需以交互方式提供密码
    ansible-playbook -i your_inventory your_playbook
    ansible-playbook -i your inventory somehost -m debug -a "msg={{ some_encrypted_var }}"
    
    Run Code Online (Sandbox Code Playgroud)