在ansible playbook中创建用户密码

User password creation in ansible playbook

我想创建一个用户并为其设置密码。 用户模块中的第一个密码行和第二个密码行不起作用。试图通过散列变量传递它,但没有成功:)

如果我运行

并将值放入密码行 - 它工作得很好,但我仍然想使用我的密码变量。你能告诉我如何将它的值发送到这个命令吗?

"password | password_hash('sha512', 'mysecretsalt') }}"

.

---

 - name: create ssh keys and distribute ssh public key for user
   hosts: clients
   become: yes

   vars:
    uname : Jim
    create_user : False
    password : imuser

   tasks:

   - name: creating password
     set_fact:
        hash : "{{ 'password' | password_hash('sha512', 'mysecretsalt') }}"

   - debug:
       msg : "hashed password is {{ hash }}"

   - name: create user if necessary
     user:
      name: "{{ uname }}"
      state: present
      password : "password | password_hash('sha512', 'mysecretsalt') }}"
#      password : "{{ hash }}"
#      password: $mysecretsalt$ZfUPIwkf1o9u8P04aJuQCgMfSZoIAeCoZpkbNKKn7LtiI.nQl8UWRIhO.rStaZzM8u0Bja3/9bzgOjagM5whY.
      shell : /bin/bash
     when: create_user == "True"

   - name: get etc/passwd
     shell: cat /etc/passwd
     register: passwd

   - block:
     - debug:
         var: passwd.stdout
     - debug:
         var: uname

     when: inventory_hostname == "ansible_client1"

   - name: create ssh key for user
     user:
      name: "{{ uname }}"
      generate_ssh_key : yes
      ssh_key_file : '{{ uname }}_id_rsa'
     when: '"uname" in passwd.stdout'
     register: create_key

   - debug:
       var: create_key

第二个问题是:

在我用 userdel 删除了用户并用 rm -rf 删除了他的 homedir 之后,ansible_client1 每个 运行 都跳过了任务“为用户创建 ssh 密钥”,因为一开始看起来很奇怪运行 剧本。它在第二台主机上完美运行。 如果我检查 /etc/passwd - 两个服务器都存在用户:

[admin@ansible_client1 ~]$ cat /etc/passwd | grep Jim
Jim:x:1004:1005::/home/Jim:/bin/bash

[admin@ansible_client2 Jim]$ cat /etc/passwd | grep Jim
Jim:x:1007:1008::/home/Jim:/bin/bash

每次都在 ansible_client1 上创建用户并且 homedir 在那里,仍然正在跳过任务,并且似乎无法在 passwd.stdout 中以某种方式找到 uname。

所以...我想知道这里发生了什么

在你的第二个任务中 "password | password_hash('sha512', 'mysecretsalt') }}" 必须 "{{ password | password_hash('sha512', 'mysecretsalt') }}" 使用 te var password"{{ 'password' | password_hash('sha512', 'mysecretsalt') }}" 使用单词 password 作为密码。