【问题标题】:How to automatically pass vault password when running Ansible playbook?运行 Ansible playbook 时如何自动传递保险库密码?
【发布时间】:2018-01-30 04:50:49
【问题描述】:

我有一个带 vault 的 Ansible playbook,我想通过我的 web 界面中的提示框询问 vault 密码,然后在运行 ansible playbook 时传递发布的密码。我尝试使用:

echo $password | ansible-playbook test.yml --ask-vault-pass

将密码传递给playbook,但是不起作用,错误信息是:

"msg": "正在尝试解密,但未找到保管库机密"

我不想在某些文件中存储密码,现在我只想尝试在运行时自动将密码传递给剧本。对我有什么建议吗? ansible 版本是 2.4。

【问题讨论】:

    标签: ansible ansible-vault


    【解决方案1】:

    您可以使用脚本而不是通过交互式界面提供密码。

    以下是您的用例示例:

    1. 保存path_to/vault_secret.sh文件(添加执行权限),内容如下:

      #!/bin/bash
      echo $password
      
    2. 执行:

      ansible-playbook test.yml --vault-password-file path_to/vault_secret.sh
      

    或者:

    1. 添加到ansible.cfg:

      [defaults]
      vault_password_file=path_to/vault_secret.sh
      
    2. 执行:

      ansible-playbook test.yml
      

    【讨论】:

    • 感谢指导!我试试看!
    【解决方案2】:

    您可以将--vault-password-file 与文件描述符一起使用:

    ansible-playbook test.yml --vault-password-file <(echo somepassword)
    

    【讨论】:

      【解决方案3】:

      @全部 确保将 vault_password_file = 添加到 ansible.cfg 文件的 [defaults] 部分。

      当我在另一个部分添加 vault_password_file = 时遇到了同样的问题,在将其移至 [defaults] 后已解决

      如果有帮助,试试你的运气。

      【讨论】:

        【解决方案4】:

        这是我做事的方式,而且效果很好。 我的命令行如下所示:

        [prompt/]$ansible-playbook -i <inventory>, /mnt/m/NetworkGetters/get_vpn_status.yml --extra-vars varsfilepath=/mnt/m/NetworkVars/host_vars/test-oci-test-vpn-config.yml
        

        我清理过的 passwords.yml(保险库文件)如下所示:

        ---
        credentials:
          base: &base
            host: "{{ansible_host}}"
            timeout: 30
            transport: cli
          svc_rhelsystemrw:
            <<: *base
            username: svc_rhelsystemrw
            password: dWERE#@kds23
        

        我的剧本遵循这个惯例:

        name: Set VPN Configuration
          hosts: all
          connection: local
          gather_facts: no
          vars_files:
            - "{{ varsfilepath }}"
            - "/etc/ansible/NetworkVars/passwords.yml"
          vars:
            # ssh_auth credentials come from ansible vault
            provider_rw:
              username:  "{{ credentials['svc_rhelsystemrw'].username }}"
              password:  "{{ credentials['svc_rhelsystemrw'].password }}"
        
          tasks:
          - name: Capture Pre-change Configuration
            ios_command:
              provider: "{{ provider_rw }}"    
              commands:
                - show running-config
            register: running_config_before
            tags: vpn 
        
          - debug:
              var: running_config_before.stdout
            tags: vpn
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多