Я создаю два скрипта Bash на моем Raspberry Pi, на котором работает стандартный дистрибутив Linux на основе Debian: один для сна моего настольного компьютера и один для его выключения.
Скрипт для выключения компьютера работает нормально, и его содержимое:
sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "shutdown /s"
Мой рабочий стол работает под управлением Windows 10 и встроенного SSH-сервера, который поставляется с Windows 10.
Однако, когда я пытаюсь запустить скрипт для сна моего компьютера, мне выдается следующее:
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 является проблемой на следующий день.