Frage Möglichkeit, SSH-Verbindungs-Timeout und das Einfrieren des GNOME-Terminals zu vermeiden


Wenn ich mich über ssh mit bestimmten Servern verbinde, Timeouts und "friert" das Terminal ein (akzeptiert keine Eingabe, trennt nicht, kann nicht Strg-C, um den ssh-Prozess oder irgendetwas zu beenden).

Dies ist in Ubuntus gnome-terminal Es scheint jedoch, die Terminal-Eingabe / Ausgabe zu pausieren, und hat keinen Einfluss auf den Betrieb der GNOME-Terminal-Software selbst. Also weniger ein Bug mit gnome-terminal als eine lästige Inkonsistenz mit ssh.

Also, gibt es eine Möglichkeit, das Terminal von SSH-Verbindungen zu verhindern, die ein Zeitlimit überschritten haben?


217
2018-01-20 23:33


Ursprung


Mögliches Duplikat von Wie kann man einen SSH-Tunnel zuverlässig offen halten? - Murmel


Antworten:


sshd (der Server) schließt die Verbindung, wenn sie eine Weile nichts vom Client hört. Sie können Ihrem Client mitteilen, ab und zu ein Sign-of-Life-Signal an den Server zu senden.

Die Konfiguration dafür befindet sich in der Datei ~/.ssh/config. Um das Signal alle vier Minuten an Remotehost zu senden, setze folgendes in dein ~/.ssh/config.

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

Das habe ich in meinem ~/.ssh/config.

Um es für alle Hosts zu aktivieren, verwenden Sie:

Host *
  ServerAliveInterval 240

Stellen Sie außerdem sicher, dass Sie ausgeführt werden chmod 600 ~/.ssh/config, weil die Konfigurationsdatei nicht für alle lesbar sein muss.


244
2018-01-20 23:53



Danke, dass du mir bei der Formulierung geholfen hast, es wird sehr geschätzt. Ich änderte "sollte nicht" zurück zu "muss nicht", weil ssh überprüft die Berechtigungen der Datei und wenn es Welt oder Gruppe lesbar ist, scheitert es. - Ludwig Weinzierl
Das hat das OP nicht gefragt. Er wird wegen Inaktivität nicht entlassen. Er versucht sich zu verbinden und sein Terminal friert. - Cerin
Wo ist das ~/.ssh/config? - User
@User '~ /' steht für Ihren Home-Ordner. '.ssh' ist ein Ordner in Ihrem Home-Ordner. - wkm
Das ist nutzlos, wenn Ihre Verbindung tatsächlich verloren geht ... - so12311


Drücken Sie Eingeben, ~, . einer nach dem anderen von einer eingefrorenen Sitzung zu trennen.

Der Abschnitt "ESCAPE CHARACTERS" in der ssh man-Seite erklärt die zugrunde liegenden Details.


231
2018-01-20 23:44



Diese Antwort scheint mir die Frage genauer zu beantworten, und auf jeden Fall war es die Antwort, nach der ich suchte. - CoatedMoose
Beachten Sie, dass Sie die Zeile auskommentieren müssen EscapeChar ~ im /etc/ssh/ssh_config (oder ~/.ssh/ssh_config wenn Sie bevorzugen). - Aditya M P
@adityamenon Nein, EscapeChar ~ ist bereits der eingebaute Standard. - Peter Eisentraut
@Mark die Frage fragt "Gibt es eine Möglichkeit, zu verhindern, das Terminal von SSH-Verbindungen wiederzuerlangen das hat abgelaufen? "Hervorhebung von mir. - CoatedMoose
Obwohl es im Zusammenhang mit der Frage falsch war, ist dies genau das, was ich wollte. - Subin Sebastian


Auch wenn dies keine direkte Antwort auf Ihre Frage ist, hängt es stark mit dem Problem zusammen, das Sie haben. Anstatt zu versuchen, die Verbindung am Leben zu erhalten (alle Verbindungen sterben schließlich), können Sie Terminal-Multiplexer, wie screen und tmux Dies hält die Sitzung im Hintergrund aktiv, auch wenn die Verbindung zu Ihrem Terminal getrennt wird.

Wenn Sie sich auf dem SSH-Server anmelden, werden Sie sofort ausgeführt screen was eine neue Sitzung erstellen und anhängen wird:

$ screen

Dann gehst du weiter und machst deine Arbeit mit der Shell, wie du es normalerweise tun würdest. Wenn jetzt die Verbindung unterbrochen wird, wenn Sie wieder online gehen und sich über SSH wieder mit dem Server verbinden können, erhalten Sie eine Liste der aktuellen Sitzungen mit:

$ screen -ls

Um wieder an eine Sitzung anzuhängen:

$ screen -r <session>

woher <session> ist die PID oder ein Sitzungsname. Sie werden wieder mit Ihrer Sitzung verbunden und Sie können dort weitermachen, wo Sie aufgehört haben!

Sie können die Sitzung sogar trennen und die Verbindung von zu Hause wieder herstellen, um an der Stelle aufzuholen, an der Sie aufgehört haben. So trennen Sie die Sitzung, die Sie verwenden C-a gefolgt von C-d (Das ist Control + A und dann Control + D).

Es gibt einfaches Online-Tutorial auch.

Verwenden screen und tmux auf Remote-Servern gilt als a beste Übung und ist sehr empfehlenswert. Manche Leute gehen so weit zu haben screen Als ihre Standard-Login-Shell, also wenn sie eine Verbindung herstellen, starten sie sofort eine neue screen Session.


38
2017-07-03 01:28



Eine andere Alternative ist die Verwendung von Mosh: mosh.mit.edu - Zombies
Dies ist besonders nützlich, wenn Sie einen Hotspot oder WLAN verwenden, der gelegentlich ausfällt. - Randall


Versuchen Sie, anzuhängen -o ServerAliveInterval=30 zu Ihrer Verbindungszeichenfolge (30 bedeutet 30 Sekunden und kann natürlich angepasst werden)


11
2018-02-06 14:13





Sie können auch ein Leerlauf-Timeout-Intervall von der SSH-Serverseite aus festlegen:

Datei: /etc/ssh/ssh_config

Inhalt:

ClientAliveInterval XX
ClientAliveCountMax YY

Dies funktioniert genau wie die Clienteinstellung, aber Nullpakete werden vom Server anstatt vom Client gesendet.

Extrahiert aus:

http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html


5
2018-02-12 22:45





Für Leute, die den Kunden davon abhalten wollen, sich in die Zange zu setzen.

Du könntest versuchen zu setzen ConnectTimeout 0 in der Konfigurationsdatei. Der Wert 0 bedeutet, dass die Verbindung am Leben erhalten wird. Unbegrenzt, wenn nicht geschlossen.

Die Datei config (oder ssh_config) könnte folgendermaßen aussehen:

Host *
   ConnectTimeout 0

1
2017-12-17 02:19