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

Ansible vault password in group_vars not detected

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

我有这个目录结构:

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

我的问题是关于文件 vault。根据 this 教程,我试图在此处放置一个 Windows 登录密码作为加密变量。变量名称是 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,有点类似于 Whosebug post.
  2. 解决问题 B.: 我必须用文本中的实际密码 (mypassword) 替换 vault 中的散列。

问题:

  1. 关于 A:在我遇到的关于 ansible vault 的教程中,我没有看到 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 are using hashes as their variables). Actually, even the Ansible docs suggest使用mkpasswd生成密码,可能我理解错了,不应该使用mkpasswd --method=SHA-512 对密码进行哈希处理,然后将哈希值作为变量值?难道在vault文件中不能使用哈希值作为key:value中的值吗?

group_vars 依赖file/directory name – 应该对应具体的组名。

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

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

myansiblehome
\ windows_manage
  \ group_vars
    \ windows
      \ windows.yml
      - vault