Wie prüfe ich den Exit-Code des SSH-Tunnels?

467
hebbo

Ich beherrsche die Form:

dd if=/my/block/device | ssh myuser@otherserver "gzip > file.gz" 

Wie kann ich überprüfen, ob der Befehl ssh aufgrund von Verbindungsproblemen fehlgeschlagen ist?

Vielen Dank.

0

2 Antworten auf die Frage

1
Kamil Maciorowski

Von man 1 bash:

Der Rückgabestatus einer Pipeline ist der Beendigungsstatus des letzten Befehls, sofern die pipefailOption nicht aktiviert ist. Wenn pipefailaktiviert, ist der Rückkehrstatus der Pipeline der Wert des letzten (ganz rechts stehenden) Befehls zum Beenden mit einem Status ungleich Null oder Null, wenn alle Befehle erfolgreich beendet wurden.

Dann von man 1 ssh:

sshwird mit dem Exit-Status des Remote-Befehls oder mit 255einem Fehler beendet.

Normalerweise (mit pipefaildeaktiviertem) erhalten Sie den Exit-Status von ssh. Ein möglicher Wert von 255aus kommt sshselbst oder kommen kann, aus welchem Befehl, den Sie auf der Remote - Seite laufen (aber „gemeinsame“ Fehler in der Regel „low“ Exit - Status ergeben, wie 1, 2). In der Praxis 255bedeutet das, dass etwas schief gelaufen ist.

Der Beendigungsstatus ist $?unmittelbar nach dem Verlassen der Pipe als Sonderparameter verfügbar . Beispiel:

$ true | ssh no-such-address.example.org true # error message here, skipped $ echo $? 255 

Um genauere Informationen zu erhalten ssh, müssen Sie deren Status analysieren. Siehe Handbuch, insbesondere -E(falls verfügbar) und -vOptionen. -EGibt sshan, in welche Protokolldatei geschrieben werden soll. Sie erhalten jedoch einen ähnlichen Effekt, wenn Sie stderr mit umleiten 2>/path/to/logfile. Über -v:

-v
Verbose-Modus Druckt sshDebugging-Meldungen über den Fortschritt aus. Dies ist hilfreich beim Debuggen von Verbindungs-, Authentifizierungs- und Konfigurationsproblemen. Mehrere -vOptionen erhöhen die Ausführlichkeit. Das Maximum ist 3.

Die allgemeine Vorgehensweise sieht also so aus: sshÜberprüfen Sie nach dem Beenden den Beendigungsstatus; Wenn ja 255, analysieren Sie, logfileob der Fehler "auf Verbindungsprobleme zurückzuführen ist".

0
GAD3R

Benutzen : echo $

Oder echo $um den Exit-Status aller Befehle zu überprüfen.

siehe Beispiele: $ PIPESTATUS :

Die Mitglieder des $PIPESTATUSArrays enthalten den Exit-Status jedes entsprechenden Befehls, der in einer Pipe ausgeführt wird. $PIPESTATUS[0]enthält den Exit-Status des ersten Befehls in der Pipe, $PIPESTATUS[1]den Exit-Status des zweiten Befehls usw.