다른 사용자로 명령 실행

다른 사용자로 명령 실행

"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

관련 정보