我正在我的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服务器上设置基于密钥的身份验证是另一天的挑战。
PATH
...尝试指定psshutdown
或的完整路径date
。
psshutdown
。我应该在问题中提到 - 我现在就编辑它。
psshutdown
...如果它正在工作,那么很可能在SSH会话完成之前Windows网络堆栈被暂停 - 因此Packet integrity error
......
psshutdown
,但再次这样做时,脚本运行成功,我的电脑睡了!谢谢你的帮助。这是一个非常奇怪的问题。