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 플레이북에서는 불필요한 제거 및 재설치를 방지하기 위해 홈 디렉터리에 잠금을 설정하도록 선택했습니다. 또한 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 파일의 해시는 허용됩니다.