使用 pkexec 时无法将命令传递给 ssh,出现错误

使用 pkexec 时无法将命令传递给 ssh,出现错误

我正在编写一个脚本,该脚本依赖于pkexec机器被硬化并且sudo无法工作。我允许pkexec暂时不提示用户输入密码,因此任何命令都可以直接运行。

如果我手动登录 SSH 并打开一个会话并运行如下命令:pkexec service iptables restart它可以工作,但是,如果我尝试执行类似的操作,则会收到以下错误:ssh [email protected] "pkexec service iptables restart"

Cannot run program service: no such file or directory

pkexec所以这与我作为参数传递有关。

答案1

当您执行ssh remotehost some_command类型命令时,您$PATH可能不会设置为您期望的值。

例如,我们可以看到当前登录 shell 中的 PATH 与远程 PATH 不匹配,即使我登录到同一台机器:

$ echo $PATH
/home/sweh/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/u/bin:/usr/local/bin:/usr/bin/X11:/etc:/usr/local/sbin:/sbin:/usr/sbin

$ ssh localhost 'echo $PATH'
/usr/local/bin:/usr/bin

因此,通常指定命令的完整路径名。

在本例中,错误消息Cannot run program service: no such file or directory意味着pkexec已找到该命令(可能位于默认路径上),但该service命令并未找到。

所以指定/sbin/service...例如

ssh [email protected] "pkexec /sbin/service iptables restart"

相关内容