Bad*_*ers 5 linux sudo shell-script systemd pkexec
如何强制“machinectl shell”或systemd-run在终端而不是对话框窗口中询问密码?
我可以使用以下命令以 root 身份运行命令:
machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'startxfce4'
Run Code Online (Sandbox Code Playgroud)
我想拥有与 sudo 相同的行为(sudo 使用终端询问密码,以便我可以轻松编写脚本)
我发现正在使用 ssh 这样的方式:
ssh -t MyActualNormalUser@localhost
Run Code Online (Sandbox Code Playgroud)
然后运行与上面相同的命令:
machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'thunar'
Run Code Online (Sandbox Code Playgroud)
现在 machinectl 使用终端而不是 GUI 对话框窗口询问密码!

如何在不使用 ssh 的情况下获得相同的结果?是否可以强制 machinectl/pkexec 在终端中询问密码?
为什么不使用sudo?sudo 不要为我运行的命令创建一个新会话,machinectl 运行一个完全分离的会话,这使脚本编写工作更轻松。当我读到 machinectl/pkexec 时,如果我没记错的话,su/sudo 将被替换...
要以另一个用户身份运行某些东西,我们有不同的方法:
machinectl:这会创建一个单独的会话
ssh:这会创建一个单独的会话
systemd-run:这不会创建单独的会话,而是创建一个单独的服务单元,该服务单元也可以像会话一样进行控制。例如,当我运行时loginctl session-status,我收到此错误:Could not get properties: Caller does not belong to any known session,因为没有会话 ID。
pkexec:这不会创建单独的会话
sudo:这不会创建单独的会话
我们可以用:
pkexec:这需要 pkttyagent
machinectl:这要求使用 gui 提供密码,要使用 tty 进行传递,我们需要 pkexec/sudo 或 ssh
systemd-run:这要求使用 gui 提供密码,要使用 tty 进行传递,我们需要 pkexec/sudo 或 ssh
sudo: sudo 必须替换为 pkexec
ssh:这需要 root 密码,或者我们需要使用 pkexec/sudo 或 ssh user@localhost
只有 machinectl 和 ssh 给了我一个单独的会话,systemd-run 也不错,但它适用于脚本而不是创建会话。
为了获得root权限,我们可以使用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"
Run Code Online (Sandbox Code Playgroud)
timeout 3s sshpass -e pkttyagent -p $(echo $$) &
pkexec ssh -t root@localhost "bash -lc 'export DISPLAY=:1.0 ; startxfce4'"
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
pkttyagent :需要强制 pkexec 使用终端而不是对话 Gui 来询问密码
timeout 3s :需要,因为 pkttyagent 不会单独死亡。