Почему не удается выполнить определенную команду удаленно через SSH?

408
LJD200

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

0
«некоторые работают, а некоторые выдают другую ошибку». - Пожалуйста, предоставьте эти данные Ramhound 7 лет назад 0
@Ramhound Спасибо за ваш комментарий. Я предоставил подробную информацию об ошибке на примере вывода при запуске `date` LJD200 7 лет назад 0
Это может быть из-за вашего `PATH` ... попробуйте указать полный путь к` psshutdown` или `date`. Attie 7 лет назад 1
@ Atttie Спасибо за ваш комментарий. Я также уже пытался указать полный путь к `psshutdown`. Я должен был упомянуть об этом в вопросе - я сейчас его отредактирую. LJD200 7 лет назад 1
Еще одна мысль - `psshutdown` ... если он работает, то вполне возможно, что стек Windows будет приостановлен до завершения сеанса SSH - отсюда` Ошибка целостности пакета` ... Attie 7 лет назад 1
@ Atttie Хотя я уверен, что уже пытался указать полный путь к `psshutdown`, при повторном выполнении сценарий успешно запустился, и мой компьютер спал! Спасибо за вашу помощь. Это была очень странная проблема. LJD200 7 лет назад 1

1 ответ на вопрос

1
Attie

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

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

Похожие вопросы