未检测到group_vars中的Ansible保管库密码

时间:2017-10-27 17:51:48

标签: hash ansible ansible-vault

我正在尝试使用ansible-vault来保护单个Windows登录密码。我不想将hte密码作为纯文本放在我的windows.yml文件中(见下文),因此我尝试使用ansible-vault来保护/加密此密码。

我有这个目录结构:

myansiblehome
- windows_manage
  - group_vars
    - windows.yml
    - vault
  - hosts
  - win_playbook.yml

我的问题是文件vault。我正在尝试将Windows登录密码作为加密变量放在此处,如this教程所示。变量名是ansible_password,我的想法是我应该在vault文件中有一个哈希,而不是文本中的实际密码。

我的windows.yml文件如下(遵循指南here):

ansible_user: administrator
ansible_password: "{{ vault_ansible_password }}"
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

现在,要创建vault文件,请执行以下步骤:

cd windows_manage
ansible-vault create group_vars/vault

然后,这里是我放入vault文件的所有内容:

---
vault_ansible_password: mypassword

当我使用ansible-playbook -i ./hosts win_playbook.yml --ask-vault-pass运行此文件时,出现此错误(问题A):

The field 'password' has an invalid value, which includes an
undefined variable. The error was: 'vault_ansible_password' is 
undefined\nexception type: <...>\nexception: 'vault_ansible_password' is 
undefined.

所以,我尝试生成哈希而不是使用文本。我这样做了:

mkpasswd --method=SHA-512
# copy the resulting hash to the clipboard
ansible-vault create group_vars/vault

我用这个哈希替换了文本mypassword。我将哈希粘贴到vi编辑器中并保存了vault文件。再一次,我用ansible-playbook -i ./hosts win_playbook.yml --ask-vault-pass运行了剧本。这次我得到了一个不同的错误(问题B):

fatal: [...]: UNREACHABLE! => ..."ssl: the specified
credentials were rejected by the server", "unreachable": true}

要克服这一点,我必须做两件事:

  1. 要解决问题A。:win_playbook.yml,我需要添加vars_files: group_vars\vault,有点类似于this StackOverflow帖子。
  2. 解决问题B。:我必须用vault中的实际密码替换文本中的哈希值(mypassword)。
  3. 问题:

    1. 关于答:在我遇到的有关ansible保险库的教程中,我没有看到为什么vars_file: group_vars\vars应该出现在主剧本文件中的特定原因(参见下面的链接1-4)。即在任何地方都没有提到这一点。我以为Ansible会自动检测group_vars目录中的变量???这条线是否有必要?

      1. https://serversforhackers.com/c/ansible-using-vault
      2. https://www.digitalocean.com/community/tutorials/how-to-use-vault-to-protect-sensitive-ansible-data-on-ubuntu-16-04
        • 这些人使用group_vars/vars(未加密的变量文件,类似于我的group_vars/vars)和group_vars/vault(加密变量文件类似于我的group_vars/vault),但他们正在使用角色我没有使用Ansible角色
      3. https://knpuniversity.com/screencast/ansible/variable-vault
      4. https://opensource.com/article/16/12/devops-security-ansible-vault
    2. 关于B:它看起来像其他用户(请参阅here使用哈希作为变量)。实际上,even the Ansible docs suggest使用mkpasswd来生成密码。也许我误解了一些事情。我们是否应该使用mkpasswd --method=SHA-512来散列密码,然后将散列作为变量值?是否无法使用散列作为vault文件中key:value的值?

1 个答案:

答案 0 :(得分:1)

group_vars依赖于文件/目录名称 - 它应该对应于特定的组名。

在您的情况下,windows.yml已应用于名为windows的群组,但vault已应用于名为vault的群组。

要解决您的问题,请创建名为windows的目录并将文件放在那里(windows目录下的每个文件将按字母顺序应用于windows组中的主机):

myansiblehome
\ windows_manage
  \ group_vars
    \ windows
      \ windows.yml
      - vault
相关问题