我正在编写一个脚本,该脚本依赖于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"