Was kann ich tun, wenn meine SSH-Sitzung nicht funktioniert?

109

Manchmal hängt meine SSH-Sitzung im Terminal. Wie kann ich die SSH-Sitzung beenden und die Verbindung wiederherstellen?

Kit Sunde
quelle

Antworten:

196

Typ ~.(dh Tilde, Punkt) am Anfang einer Zeile. Drücken Sie also Enter, dann ~, dann .. (In einigen Sprachen müssen Sie möglicherweise Shiftoder drücken Alt, um das ~Zeichen einzugeben .)

Im Allgemeinen ist das ~Zeichen ein Escape-Zeichen in einer SSH-Sitzung, wenn Sie es am Anfang einer Zeile eingeben. Geben Sie Enterdann ein ~?, um die Liste der Escape-Befehle anzuzeigen. Die häufigsten sind

  • ~. um die Verbindung zu beenden
  • ~^Z(drücken Sie ~dann Ctrl+ Z), um die Verbindung zu unterbrechen und einen Befehl lokal einzugeben. (Führen Sie den Befehl aus fg, um zur SSH-Sitzung zurückzukehren.)

Wenn Sie eine Tilde am Anfang einer Zeile wünschen, drücken Sie ~zweimal.

Gilles
quelle
7

Alles, was Sie tun müssen, um eine SSH-Sitzung zu beenden, ist exitdie Eingabe an der Eingabeaufforderung.

Versuchen Sie, Shift+ `+ einzugeben.

Daviesgeek
quelle
2
Es akzeptiert keine Benutzereingaben mehr, es ist buchstäblich blockiert. Unter Ubuntu gibt es eine Tastenkombination, die die Sitzung beendet, die Sie in solchen Fällen verwenden können. Nach einer Weile wird die Sitzung beendet, broken-pipeaber ich warte lieber nicht.
Kit Sunde
1
@Kit Ich habe meine Antwort korrigiert. Das tut mir leid. Ich wusste nicht, dass Sie eine vollständig blockierte SSH-Sitzung meinten.
Daviesgeek
Normalerweise warte ich nur auf das Timeout. Trotz der Tatsache, dass ich über diese Befehle Bescheid weiß, vergesse ich immer, dass ich sie verwenden kann, um den Prozess des Zurückerlangens meiner Shell zu beschleunigen. Hinweis @Gilles antwortet ebenfalls. Möglicherweise müssen Sie die Eingabetaste einmal drücken, bevor ~. Sie weitere Informationen auf der SSH-Manpage erhalten (etwas mehr als zur Hälfte). Geben Sie Folgendes ein: ~?in eine aktive / verbundene SSH-Sitzung drücken Sie einmal die Eingabetaste.
Jason Salaz
7

Wenn Ihre Sitzung hängen bleibt und die Eingabeaufforderung nicht mehr reagiert, können Sie einfach die Terminal-Instanz beenden und alle untergeordneten Prozesse, die mit dieser Instanz verknüpft sind, von denen Ihre ssh-Sitzung eine ist, sollten mit dieser Instanz beseitigt werden.

Wenn Sie wirklich gründlich sein möchten, obwohl Sie eine neue Terminal-Instanz öffnen können, suchen Sie in der Prozessliste nach ssh-Sitzungen und beenden Sie sie über die Befehlszeile:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair [email protected]

> kill 57139

Wenn das nicht funktioniert, versuchen Sie:

> kill -9 57139

Töte den ssh-agentProzess nicht.

Oder Sie können Activity Monitor öffnen und dort nach Sitzungen suchen und die Kill-Taste für sie drücken:

Aktivitätsmonitorfilterung für SSH-Sitzungen

Ian C.
quelle
+1, das ist was ich tue. Oft, wenn ich eine Sitzung laufen gelassen habe und dann entweder die Verbindung versehentlich unterbrochen wurde oder ich den Laptop schlafe, friert ssh ein. Ich öffne eine neue Konsolenregisterkarte und beende die PID des SSH-Prozesses (oder schließe die SSH-Registerkarte und öffne eine neue)
halfer
Funktioniert die Verwendung der Tastenkombination auf Ihrem Mac, ohne den Vorgang mühsam abzubrechen?
Rafael Bugajewski
1
Verwenden Sie ~.. Siehe oben.
Snowcrash
0

~. funktioniert, obwohl es so aussieht, als ob es völlig blockiert ist, stoppt die ssh-Verbindung und Sie können es erneut starten, aber auf meiner Tastatur muss ich Alt + ~, dann Leertaste und dann drücken.

Hannu
quelle