3

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

その後、以下のような Ansible プレイブックでコードを自動化しようとしています。

---
- 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

ほとんどのマシンに Python がインストールされていないため、ここでは Ansibleのraw モジュールを使用しています。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"]}

ここで私が犯している間違いを誰かに見せてもらえますか?

4

3 に答える 3

6

シェル コマンドの代わりに組み込みのユーザー モジュールを使用します。これにはbecome: True、プレイブックが必要です。passwordユーザ モジュールのパラメータには、暗号化された値が必要であることに注意してください。そこでpassword_hashジンジャフィルターが役に立ちます。

  - name: change user's password
    user:
      name: foo
      password: "{{ 'passwordsaresecret' | password_hash('sha512') }}"
于 2017-08-31T20:06:36.770 に答える