为什么通过 SSH 远程运行特定命令会失败?

为什么通过 SSH 远程运行特定命令会失败?

我正在运行默认的基于 Debian 的 Linux 发行版的 Raspberry Pi 上创建两个 Bash 脚本:一个用于使我的台式计算机进入睡眠状态,另一个用于将其关闭。

关闭计算机的脚本可以正常工作,其内容如下:

sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "shutdown /s"

我的桌面运行的是 Windows 10 以及 Windows 10 自带的内置 SSH 服务器。

但是,当我尝试运行脚本来使计算机进入睡眠状态时,我看到了以下输出:

Packet integrity error (165 bytes remaining) at ../channels.c:2401
Disconnecting: Packet integrity error.

这个脚本的内容是:

sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "psshutdown /d"

“psshutdown”是指Windows Sysinternals 实用程序

psshutdown /d奇怪的是,当我坐在桌面时,从管理员命令提示符运行该命令,我的计算机成功进入睡眠状态。如果我通过 SSH 从 Pi 连接而不指定连接后要运行的命令(即sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME,然后运行该psshutdown /d命令),它也会起作用。直接在 Bash 中运行与脚本中相同的命令会失败,输出与上述相同。

有趣的是,当尝试以与 sleep 脚本中相同的方式运行其他命令时,有些命令可以正常工作,而有些命令会抛出不同的错误。例如,sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "whoami"运行正常并返回正确的输出,但sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "date"会产生输出exec request failed on channel 0

是什么原因导致睡眠脚本失败以及如何解决该问题以便通过 SSH 成功运行命令?

注意:我知道将 SSH 密码以纯文本形式存储在脚本文件中并不理想,但在内置 SSH 服务器上设置基于密钥的身份验证又是另一个挑战。

答案1

这可能是由于您的...尝试指定或的PATH完整路径。psshutdowndate

没有 shell 或 PTY 的 SSH 会话很可能只有一组非常基本的PATH设置...

相关内容