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


0

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

关闭计算机的脚本运行正常,其内容为:

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中运行与脚本相同的命令失败,输出与上面相同。

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

是什么导致睡眠脚本失败?如何解决通过SSH成功​​运行命令的问题?

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


“有些工作,有些则会产生不同的错误。” - 请提供这些细节
--Ramhound

1
这可能是因为你PATH...尝试指定psshutdown或的完整路径date
Attie

1
@Attie感谢您的评论。我也已经尝试指定完整路径psshutdown。我应该在问题中提到 - 我现在就编辑它。
LJD200 '17年

1
另一个想法重新psshutdown...如果它正在工作,那么很可能在SSH会话完成之前Windows网络堆栈被暂停 - 因此Packet integrity error......
Attie

1
@Attie虽然我确定我已经尝试指定完整路径psshutdown,但再次这样做时,脚本运行成功,我的电脑睡了!谢谢你的帮助。这是一个非常奇怪的问题。
LJD200 '17年

Answers:


1

这可能是由于你PATH...尝试指定psshutdown或的完整路径date

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.