我正在尝试使用 ansible-vault 来保护单个 Windows 登录密码。我不想将 hte 密码作为纯文本放在我的 windows.yml 文件中(见下文),所以我试图用它ansible-vault
来保护/加密这个密码。
我有这个目录结构:
myansiblehome
- windows_manage
- group_vars
- windows.yml
- vault
- hosts
- win_playbook.yml
我的问题是关于文件vault
。根据本教程,我正在尝试将 Windows 登录密码作为加密变量放置在这里。变量名是ansible_password
,我的想法是我应该在vault
文件中有一个哈希,而不是文本中的实际密码。
我的windows.yml
文件如下所示(按照此处的指南):
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}
为了克服这个问题,我必须做两件事:
- 要解决问题 A.:在 中
win_playbook.yml
,我需要添加vars_files: group_vars\vault
,有点类似于这个StackOverflow 帖子。 - 要解决问题 B.:我必须用
vault
文本中的实际密码 (mypassword) 替换散列。
问题:
关于 A:在我遇到的 ansible vault 教程中,我没有看到为什么
vars_file: group_vars\vars
应该出现在主剧本文件中的特定原因(请参见下面的链接 1-4)。即任何地方都没有提到这一点。我以为 Ansible 会自动检测group_vars
目录中的变量???为什么需要这条线?- https://serversforhackers.com/c/ansible-using-vault
- 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 角色
- 这些人使用
- https://knpuniversity.com/screencast/ansible/variable-vault
- https://opensource.com/article/16/12/devops-security-ansible-vault
关于 B:它看起来像其他用户(见这里使用哈希作为他们的变量)。实际上,即使是 Ansible 文档也建议使用它
mkpasswd
来生成密码。也许我误解了什么。我们不应该使用mkpasswd --method=SHA-512
散列密码然后将散列作为变量值吗?不能使用哈希作为文件中 key:value 中的值vault
吗?