如何强制“machinectl shell”或systemd-run在终端而不是对话框窗口中询问密码?
我可以使用以下命令以 root 身份运行命令:
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'
现在 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:这不会创建单独的会话
如何在终端(不是gui)中传递密码
我们可以用:
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
pkttyagent :需要强制 pkexec 使用终端而不是对话 Gui 来询问密码
超时 3s :需要,因为 pkttyagent 不会单独死亡。
解决方案 1
您可以使用
systemd-ask-password
为 bash 变量分配密码。例子
解决方案 2
作为 root 用户,您可以使用
machinectl --no-ask-password
. 从文档中:参考
https://www.freedesktop.org/software/systemd/man/systemd-ask-password.html https://www.freedesktop.org/software/systemd/man/machinectl.html