以没有 sudo 权限的非 root 用户身份连接时,使用 Ansible playbook 脚本更改 linux 密码

kut*_*iah 3 linux passwords bash passwd ansible

我正在尝试从 Ansible playbook更改非 root Linux 用户的密码。为此,我尝试按照此链接进行操作

按照说明,我可以通过在终端中输入以下代码成功更改非 root 用户的密码。

$ echo -e "your_current_pass\nlinuxpassword\nlinuxpassword" | passwd
Changing password for testuser.
(current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Run Code Online (Sandbox Code Playgroud)

之后,我尝试使用如下所示的 Ansible playbook 自动化代码,

---
- hosts: all
  gather_facts: no

  tasks:
    - name: "Check if user exists"
      register: user1_exists
      raw: getent passwd {{ ansible_user }}
      ignore_errors: true

    - name: "Change {{ ansible_user }} password"
      raw: echo -e "my_current_pass\nmy_new_pass\nmy_new_pass" | passwd
      when: user1_exists|success
Run Code Online (Sandbox Code Playgroud)

我在这里使用Ansible的原始模块,因为我的大多数机器都没有安装 Python。我也无权在剧本中superuser (sudo)使用become: True

此处还使用基于密码的身份验证在目标机器上运行 Ansible playbook。不是基于 ssh 的身份验证。

但是当我执行剧本时,我收到了这个错误,

TASK [change user1 password] ***************************************************
fatal: [192.168.0.57]: FAILED! => {"changed": true, "failed": true, "rc": 10, 
"stderr": "Shared connection to 192.168.0.57 closed.\r\n", "stdout": "Changing 
password for testuser.\r\n(current) UNIX password: passwd: Authentication 
token manipulation error\r\npasswd: password unchanged\r\n", "stdout_lines": 
["Changing password for testuser.", "(current) UNIX password: passwd: 
Authentication token manipulation error", "passwd: password unchanged"]}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我在这里犯的错误?

kfr*_*ezy 6

使用内置用户模块而不是 shell 命令。这需要become: True在您的剧本中。请注意,password用户模块的参数需要加密值。该password_hash神社过滤器会帮助你。

  - name: change user's password
    user:
      name: foo
      password: "{{ 'passwordsaresecret' | password_hash('sha512') }}"
Run Code Online (Sandbox Code Playgroud)