Wie kann ich das Terminal auftauen, wenn die SSH-Verbindung unterbrochen wird?

Ich verwende Mac 10.9.5 mit Bash-Shell. Gelegentlich, wenn ich in eine andere Maschine ssh und dann die Verbindung abbricht (z. B. wenn das Internet ausfällt oder ich an einen neuen Ort ziehe), wird das Terminalfenster mit der offenen SSH-Sitzung eingefroren und die einzige Möglichkeit, wie ich scheinbar weitermachen kann, ist um es zu schließen und eine neue Sitzung zu starten.

Gibt es eine Möglichkeit, die Dinge so zu konfigurieren, dass ich, wenn die Verbindung der SSH-Sitzung unterbrochen wird, zu meiner normalen Bash-Shell zurückkehre, wie vor der Ausführung meines sshBefehls?

Versuchen Sie, ServerAliveCountMax und ServerAliveInterval in Ihrer ~/.ssh/ssh_config zu konfigurieren.
@ScottDudley kannst du mehr Details geben?
@phatmann zB. mit ServerAliveCountMax 4und ServerAliveInterval 15, wenn der SSH-Client nach 4*15=60 Sekunden keine Antwort vom Server erhält, sollte er automatisch die Verbindung trennen. Weitere Informationen finden Sie auf der Manpage .
returndann ~.weitere Informationen apple.stackexchange.com/questions/35524/…

Antworten (1)

Sie können sshden aufgehängten Prozess anhalten und dann beenden. Dazu müssen Sie die Escape-Sequenz ausgeben, den sshProzess unterbrechen und kill -9diesen Prozess dann mit beenden.

Die Standard-Escape-Taste für das mit OS X gelieferte ssh- ~Zeichen. Sie müssen es sofort nach einer neuen Zeile eingeben, damit ssh es respektiert. Und dann wird die Tastenfolge Control- zverwendet, um eine Aufgabe in Bash anzuhalten und in den Hintergrund zu bringen.

Versuchen Sie also diese Tastenfolge:

Return

~

Control-z

Wenn es funktioniert, sehen Sie so etwas wie:

myhost.local:~ |ruby-2.2.0|
> ssh someremotehost
Last login: Fri Mar  6 14:15:28 2015 from myhost

someremotehost:~ |ruby-2.2.0|
> ~^Z [suspend ssh]

[1]  + 48895 suspended  ssh myremotehost

Diese Ausgabezeile:

[1]  + 48895 suspended  ssh myremotehost

teilen Ihnen die Prozess-ID des sshProzesses auf Ihrem Computer mit. Es ist 48895in diesem Beispiel. Dieser Prozess läuft noch, er wurde nur ausgesetzt und in den Hintergrund gestellt. Du musst es töten.

Das kannst du mit dem killBefehl machen. Sie möchten es mit Vorurteilen töten, also verwenden Sie die -9Option, wenn Sie killso anrufen:

myhost.local:~ |ruby-2.2.0|
> kill -9 48895
[1]  + 48895 killed     ssh someremotehost

Verwenden Sie einfach die PID Ihres ssh Prozesses, wenn Sie diesen Befehl anstelle der 48895oben verwendeten PID aufrufen.

Und Sie haben Ihre Eingabeaufforderung zurück.

Alternativ können Sie ein zweites Terminalfenster öffnen und psmit den sshProzess in der Prozessliste finden und den kill -9Aufruf gegen die PID absetzen. Allerdings vereitelt das irgendwie den Prozess, Ihre Eingabeaufforderung wieder in das ursprüngliche Terminalfenster zu bringen, nicht wahr?