首页 > 解决方案 > 无法使用 ansible 用户模块为用户分配密码

问题描述

- name: Add new SFTP user (user provided by prompt)'
  hosts: '{{ target }}'
  vars:
    pwd_alias: "{{ lookup('password', '/dev/null length=15 chars=ascii_letters') }}"
    user_to_add: "{{ newuser }}"
  tasks:
    - set_fact:
        my_pass: "{{ pwd_alias | password_hash('sha512') }}"
    - name: Create user
      user:
        name: "{{ user_to_add }}"
        password: "{{ my_pass }}"
        shell: /bin/bash
        create_home: yes
        home: "/home/sftp/{{ user_to_add }}"
        group: cgred
    - debug:
        msg: "{{ pwd_alias }},{{ my_pass }}"

当我运行它时,它会做它应该做的事情。它创建我指定的用户和主目录。它还会打印出密码和哈希值,但无论我做什么,我都无法记录对该用户的更改。

任何有关如何正确获取分配给该用户的密码的建议将不胜感激。

标签: pythonlinuxansible

解决方案


问题是pwd_alias,当放入 , 时vars,每次引用都会被评估。比如下面的戏

  vars:
    pwd_alias: "{{ lookup('password', '/dev/null length=15 chars=ascii_letters') }}"
  tasks:
    - debug: var=pwd_alias
    - debug: var=pwd_alias
    - debug: var=pwd_alias

"pwd_alias": "RrhCtAFEHievoTY"
"pwd_alias": "TxHCsdKlpweqVJL"
"pwd_alias": "xbFLVvuMkkNkqIE"

解决方案很简单。将评估pwd_alias放入任务中。例如

tasks:
  - set_fact:
      pwd_alias: "{{ lookup('password', '/dev/null length=15 chars=ascii_letters') }}"
  - set_fact:
      my_pass: "{{ pwd_alias | password_hash('sha512') }}"

推荐阅读