"machinectl shell" 또는 systemd-run이 대화 상자 창 대신 터미널에서 비밀번호를 묻도록 하려면 어떻게 해야 합니까?
다음을 사용하여 루트로 명령을 실행할 수 있습니다.
machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'startxfce4'
나는 sudo와 동일한 동작을 원합니다. (sudo는 쉽게 스크립트를 작성할 수 있도록 터미널을 사용하여 비밀번호를 요청합니다.)
SSH를 사용하여 찾은 방법은 다음과 같습니다.
ssh -t MyActualNormalUser@localhost
그런 다음 위와 동일한 명령을 실행합니다.
machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'thunar'
machineectl은 이제 GUI 대화 상자 대신 터미널을 사용하여 비밀번호를 요청합니다!
SSH를 사용하지 않고 어떻게 동일한 결과를 얻을 수 있습니까? machineectl/pkexec가 터미널에서 비밀번호를 요구하도록 강제할 수 있습니까?
왜 sudo를 사용하지 않습니까? sudo는 내가 실행하는 명령에 대해 새 세션을 생성하지 않고, machinectl은 완전히 별도의 세션을 실행하므로 스크립팅이 더 쉬워집니다. machineectl/pkexec를 읽을 때 기억이 맞다면 su/sudo가 대체됩니다...
답변1
다른 사용자로 명령 실행
다른 사용자로 무언가를 실행하려면 다른 방법이 있습니다.
기계 제어: 별도의 세션이 생성됩니다.
SSH: 별도의 세션이 생성됩니다.
시스템 실행 중: 별도의 세션을 생성하는 것이 아니라 세션처럼 제어할 수 있는 별도의 서비스 단위를 생성합니다. 예를 들어 실행하면
loginctl session-status
다음 오류가 발생합니다.Could not get properties: Caller does not belong to any known session
세션 ID가 없기 때문입니다.프로그램 실행: 별도의 세션을 생성하지 않습니다.
스도: 별도의 세션을 생성하지 않습니다.
터미널에서 비밀번호를 전달하는 방법(GUI 아님)
우리는 다음을 사용할 수 있습니다:
프로그램 실행: pkttyagent가 필요합니다.
기계 제어: GUI를 사용하여 비밀번호를 제공해야 하며 pkexec/sudo 또는 ssh가 필요한 tty를 사용하여 비밀번호를 전달해야 합니다.
시스템 실행 중: GUI를 사용하여 비밀번호를 제공해야 하며 pkexec/sudo 또는 ssh가 필요한 tty를 사용하여 비밀번호를 전달해야 합니다.
스도: sudo를 pkexec로 바꿔야 합니다.
SSH: 루트 비밀번호가 필요하거나 pkexec/sudo 또는 ssh user@localhost를 사용해야 합니다.
결론적으로:
machinectl과 ssh만이 별도의 세션을 제공했고 systemd-run도 좋지만 세션을 생성하지 않는 스크립트에서는 작동합니다.
루트 권한을 얻으려면 pkexec를 사용할 수 있습니다.
- 기계 제어
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec machinectl shell --uid=root --setenv="DISPLAY=:1.0" --setenv=SHELL=/bin/bash .host /bin/bash -lc "startxfce4"
- SSH
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec ssh -t root@localhost "bash -lc 'export DISPLAY=:1.0 ; startxfce4'"
- 시스템 실행 중
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec systemd-run --pty --pipe --wait --collect --service-type=exec --uid=root bash -lc "export DISPLAY=:1.0 ; export SHELL=/bin/bash ; startxfce4"
pkttyagent: pkexec가 암호를 묻는 대화 상자 Gui 대신 터미널을 사용하도록 강제해야 합니다.
시간 초과 3초: pkttyagent가 단독으로 종료되지 않기 때문에 필요합니다.
답변2
솔루션 1
systemd-ask-password
를 사용하여 bash 변수에 비밀번호를 할당 할 수 있습니다 .
예
password=$(systemd-ask-password --echo "machinectl password: ")
machinectl login {{ user }} $password
machinectl shell {{ your command }}
솔루션 2
machinectl --no-ask-password
루트로서 문서에서 다음 을 사용할 수 있습니다 .
--비밀번호를 묻지 마세요.
권한 있는 작업에 대해 사용자에게 인증을 요청하지 마세요.
인용하다
https://www.freedesktop.org/software/systemd/man/systemd-ask-password.html https://www.freedesktop.org/software/systemd/man/machinectl.html