Systemd:非対話型でhomectlにパスワードを提供する

Systemd:非対話型でhomectlにパスワードを提供する

ansibleを介してsystemd-homedホームディレクトリを有効にしたいと思います。プログラムでsystemdパスワードエージェントにパスワードを提供するにはどうすればよいですか?

homectl activateに直接パスワードを渡すことはできないようです...

$ echo $PASSWORD | homectl activate $USER

Broadcast message from root@...:

Password entry required for 'Please enter password for user user:' (PID 1319).
Please enter password with the systemd-tty-ask-password-agent tool.

ベストアンサー1

私はansibleにパスワードを渡す方法を見つけることができませんでしたが、homectl unlockansibleはパスワードを提供してpamを呼び出すオプションを提供することでsuシステムホームのロックを解除できます。--loginsu

同様の構成は、cat "${passwordfile}" | sudo -Siu "${user}" COMMANDansibleを使用しない場合でも同様に機能する必要があります。

私のAnsible Playbookでは、不要な削除と再インストールを防ぐためにホームディレクトリにロックを設定することを選択しました。また、suログインシェルでユーザーのホームディレクトリに対して実行されるすべてのコマンドを実行することにしました。

- name: act in users homedir
  become: true
  become_user: "{{user.name}}"
  become_method: su
  become_flags: '--login'
  vars:
    ansible_become_pass: "{{user.password}}"
  block:
  - name: lock user dir to prevent home unmount
    command: "flock -x -w 10 \"/home/{{user}}\" -c 'sleep 600'"
# ...
  always:
    - name: Release the lock
      command: "killall -u {{user}} flock"
      ignore_errors: true

システムのホームディレクトリでタスクを実行するユーザーになりたくない場合は、次の方法があります。

# Note: The user directory will unmount automatically after 600s.
# Change to 'sleep infinity' if this bothers you.
- name: act in users homedir
  block:
  - name: lock user dir to prevent home unmount
    command: "flock -x -w 10 \"/home/{{user}}\" -c 'sleep 600'"
    become: true
    become_user: "{{user.name}}"
    become_method: su
    become_flags: '--login'
    vars:
      ansible_become_pass: "{{user.password}}"
# ...
  always:
    - name: Release the lock
      command: "killall -u {{user}} flock"
      ignore_errors: true

おすすめ記事