Я создаю два скрипта 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 является проблемой на следующий день.

1 ответ1

1

Вероятно, это связано с вашим PATH ... попробуйте указать полный путь к psshutdown или date .

Сеанс SSH без оболочки или PTY, скорее всего, будет иметь очень простой набор PATH ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .