Warum schlägt die Ausführung eines bestimmten Befehls über SSH aus der Ferne fehl?

444
LJD200

Ich erstelle zwei Bash-Skripts auf meinem Raspberry Pi, auf dem die standardmäßige Debian-basierte Linux-Distribution ausgeführt wird: eines zum Abschalten meines Desktop-Computers und eines zum Herunterfahren.

Das Skript zum Herunterfahren des Computers funktioniert einwandfrei und der Inhalt ist:

sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "shutdown /s" 

Auf meinem Desktop wird Windows 10 und der integrierte SSH-Server von Windows 10 ausgeführt.

Wenn ich versuche, das Skript auszuführen, um meinen Computer in den Ruhezustand zu versetzen, wird mir jedoch die Ausgabe angezeigt:

Packet integrity error (165 bytes remaining) at ../channels.c:2401 Disconnecting: Packet integrity error. 

Der Inhalt dieses Skripts ist:

sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "psshutdown /d" 

"psshutdown" bezieht sich auf das Windows Sysinternals-Dienstprogramm .

Seltsamerweise führt das Ausführen des Befehls psshutdown /düber eine Administrator-Eingabeaufforderung, wenn er sich auf meinem Desktop befindet, meinen Computer erfolgreich aus. Es funktioniert auch, wenn ich mich vom SS aus mit dem SSH verbinde, ohne einen Befehl anzugeben, der einmal ausgeführt werden soll, dh sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAMEden psshutdown /dBefehl auszuführen . Das Ausführen des gleichen Befehls wie im Skript direkt in Bash schlägt mit derselben Ausgabe wie oben fehl.

Interessanterweise werden einige Befehle ausgeführt und andere werfen einen anderen Fehler aus, wenn Sie versuchen, andere Befehle auf dieselbe Weise wie im Sleep-Skript auszuführen. Funktioniert beispielsweise sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "whoami"einwandfrei und gibt die korrekte Ausgabe zurück, sshpass -p "MYPASSWORD" ssh administrator@MYCOMPUTERNAME "date"erzeugt jedoch die Ausgabeexec request failed on channel 0

Was bewirkt, dass das Sleep-Skript fehlschlägt, und wie kann ich das Problem beheben, um den Befehl erfolgreich über SSH auszuführen?

Hinweis: Ich verstehe, dass es nicht ideal ist, das SSH-Kennwort in Klartext in einer Skriptdatei zu speichern. Die Einrichtung der schlüsselbasierten Authentifizierung auf dem integrierten SSH-Server ist jedoch eine Herausforderung für einen anderen Tag.

0
"Einige arbeiten und andere werfen einen anderen Fehler." - Bitte geben Sie diese Details an Ramhound vor 6 Jahren 0
@ Ramhound Danke für deinen Kommentar. Ich habe Details zum Fehler über das Beispiel der Ausgabe bei Ausführung von "Date" angegeben LJD200 vor 6 Jahren 0
Dies kann an Ihrem "PATH" liegen. Geben Sie den vollständigen Pfad zu "psshutdown" oder "date" an. Attie vor 6 Jahren 1
@Attie Danke für deinen Kommentar. Ich habe auch schon versucht, den vollständigen Pfad zum "psshutdown" anzugeben. Ich hätte das in der Frage erwähnen sollen - ich werde es jetzt bearbeiten. LJD200 vor 6 Jahren 1
Ein weiterer Gedanke ist "psshutdown". Wenn es funktioniert, ist es sehr wahrscheinlich, dass der Windows-Netzwerkstapel vor dem Abschluss der SSH-Sitzung angehalten wird. Daher der "Packet Integrity Error" ... Attie vor 6 Jahren 1
@Attie Obwohl ich sicher bin, dass ich bereits versucht hatte, den vollständigen Pfad zu "psshutdown" anzugeben, lief das Skript beim nächsten Aufruf erfolgreich und mein PC schlief! Danke für Ihre Hilfe. Das war ein sehr seltsames Thema. LJD200 vor 6 Jahren 1

1 Antwort auf die Frage

1
Attie

Dies liegt wahrscheinlich daran, dass PATH... Sie den vollständigen Pfad zu psshutdownoder angeben date.

Die SSH-Sitzung ohne Shell oder PTY hat höchstwahrscheinlich eine sehr grundlegende PATHEinstellung ...