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 unlock
ansibleはパスワードを提供してpamを呼び出すオプションを提供することでsu
システムホームのロックを解除できます。--login
su
同様の構成は、cat "${passwordfile}" | sudo -Siu "${user}" COMMAND
ansibleを使用しない場合でも同様に機能する必要があります。
私の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
答え2
手動制御...find --identity
... stdinのパスワードは許可されていませんが、jsonファイルのハッシュは許可されています。