这个问题在这里已有答案:
我正在尝试使用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}
为了克服这个问题,我必须做两件事:
-
要解决问题A:在
win_playbook.yml
中,我需要添加vars_files: group_vars\vault
,有点类似于this StackOverflow帖子 . -
解决问题B:我必须用文本中的实际密码(mypassword)替换
vault
中的哈希值 .
Questions:
-
关于答:在我遇到的ansible保险库的教程中,我没有看到为什么
vars_file: group_vars\vars
应该出现在主剧本文件中的特殊原因(参见下面的链接1-4).i.e . 在任何地方都没有提到这一点 . 我以为Ansible会自动检测group_vars
目录中的变量???这条线是否需要? -
这些家伙使用
group_vars/vars
(未加密的变量文件,类似于我的group_vars/vars
)和group_vars/vault
(加密变量文件类似于我的group_vars/vault
),但他们正在使用角色而我没有使用Ansible角色 -
https://opensource.com/article/16/12/devops-security-ansible-vault
-
关于B:它看起来像其他用户(请参阅here使用哈希作为变量) . 实际上,even the Ansible docs suggest使用
mkpasswd
来生成密码 . 也许我误解了一些事情 . 我们不应该使用mkpasswd --method=SHA-512
来散列密码然后将散列作为变量值吗?是否无法使用散列作为vault
文件中key:value的值?
1 回答
group_vars
依赖文件/目录名 - 它应该对应于特定的组名 .在您的情况下,
windows.yml
将应用于名为windows
的组,但vault
将应用于名为vault
的组 .要解决您的问题,请创建名为
windows
的目录并将文件放在那里(windows
目录下的每个文件将按字母顺序应用于windows
组中的主机):