首页 文章

Ansible Vault不读取已定义的变量

提问于
浏览
0

我正在为Cumulus-Linux(白盒)网络开发Ansible自动化 . 我正在使用Ansible Vault加密我的Playbooks中的密码,以便为我想在新Cumulus交换机上构建的本地帐户加密 . 但是,当我运行playbook时,似乎ansible能够从我的保险库加密文件中读取用户名变量,而不是我定义的密码变量 . 无法检查Ansible将这些密码设置为什么;当然,即使在-vvvv Ansible输出中,密码也是加密的 .

根据我看到的每个Ansible Vault示例,我的变量都是这样定义的(引用加密变量的未加密变量):

  • "user"从"vault_user"获取其值,该值位于我的保险库加密变量文件中 .

  • "password"从"vault_password"获取其值,该值也位于我的保险库加密文件中 .

我目前的剧本结构:

root
--> ansible.cfg
--> hosts
--> main.yml (main playbook)
--> group_vars
    --> all
        --> main.yml (where unencrypted "user" and "password" declared)
        --> vault.yml (encrypted, has values for "vault_user" and "vault_password")

我的剧本中创建/修改帐户的实际部分:

- name: create_admin_account
    user:
      name={{ user }}
      shell=/bin/bash
      password={{ password }}
      groups=sudo
      append=yes

/group_vars/all/main.yml中的变量定义

user: "{{ vault_user }}"
password: "{{ vault_password }}"

然后,在保险库加密的文件/group_vars/all/vault.yml(不共享实际帐户信息)中:

vault_user: 'xxxx'
vault_password: 'yyyy'

加密密码存储在一个单独的文件中,我通过jenkins automation / Github将Ansible指向该文件(而不是在ansible.cfg中定义文件库密码文件) .

问题:

当我运行这个剧本时,它成功完成,它实际上读取我的金库文件并创建'xxxx'用户帐户 . 但是,它似乎没有将帐户密码设置为我定义的值,因为我之后无法使用这些凭据登录 . 我验证了帐户是否已正确创建,然后在sudoers组中出现 .

如果ansible可以读取存储的“用户”变量,为什么它不会读取相同的“密码”变量?

我甚至尝试使用未加密的保险库文件和纯文本运行它 - ansible STILL没有正确读取我的“密码”变量 .

有没有人知道一个hack或方法,看看Ansible在运行时插入这个变量的纯文本值(可能是一个愚蠢的问题,因为这将是一个巨大的安全风险!)?

1 回答

  • 1

    除非您在macOS上执行,否则您应该为 user 结节的 password 参数提供密码哈希, not 是纯文本密码 .

    Reference

    password(可选)将用户密码设置为此加密值 . 请参阅github examples目录中的用户示例,了解playbook中的内容 . 有关生成这些密码值的各种方法的详细信息,请参阅http://docs.ansible.com/ansible/faq.html#how-do-i-generate-crypted-passwords-for-the-user-module . 关于Darwin系统的注意事项,这个值必须是明文 . 注意安全问题 .

    也就是说,在Ansible Vault加密文件中存储密码哈希没有增加的安全 Value . 它是可以从目标系统上的 /etc/passwd 文件读取的相同值(默认情况下,每个人都可以读取) .


    有人知道一个黑客或方法,看看Ansible在运行时插入这个变量的纯文本值(可能是一个愚蠢的问题,因为这将是一个巨大的安全风险!)?

    - debug:
        var: password
    

    严格地说,有些情况下屏幕上的调试模块输出不是原始值(大多数情况下,如果变量包含转义字符,如引号) . 然后检查值的唯一选项是使用复制模块并将该变量提供给content参数 .

相关问题