So verhindern Sie, dass SSH die Verbindung trennt, wenn es eine Weile inaktiv war

51

Ich habe eine SSH-Verbindung zu einem Computer, der nach 30 Minuten ohne Benutzereingabe von diesem Computer getrennt wird. Wenn ich jedoch so etwas anfange top, bleibt die Verbindung bestehen. Da dies ein Client-Computer ist, kann ich den SSH-Server dieses Computers nicht neu konfigurieren. Also suche ich nach einer Möglichkeit, Müßiggang automatisch zu erkennen und so etwas zu starten top. Eine Art "Bildschirmschoner" für Bash.

Ich weiß, dass ich das mit machen kann screen, aber leider screennicht installiert ist, und ich kann keine Software installieren. Also muss ich das nutzen, was Bash anbietet.

Um es klar zu machen: Ich suche nach einer Lösung, die ich einmal nach dem Anmelden beginne, und möchte dann dieses Terminal verwenden, weggehen, zwei Stunden später zurückkehren und weiterarbeiten, ohne etwas einzugeben, bevor ich weggehe. Außerdem schaue ich nicht nach Tunnelmaterial (dafür empfehle ich das großartige Tool sshuttle )

Irgendwelche Ideen?

Isaac
quelle
Nur eine kurze Notiz, um den Bildschirm zu verdeutlichen, und Keepalive sind nicht dasselbe: Wenn beispielsweise der SSH-Client oder -Server getrennt wird, wird Ihre SSH-Sitzung beendet, selbst wenn KeepAlive aktiviert ist, während eine Bildschirm-Shell nicht beendet wird .
MariusMatutiae

Antworten:

78

Um es klar zu machen: Ich suche nach einer Lösung, die ich nach dem Anmelden einmal starte, und dann möchte ich dieses Terminal verwenden, weggehen, zwei Stunden später zurückkehren und weiterarbeiten, ohne etwas einzugeben, bevor ich weggehe.

Das Problem ist, dass es etwas gibt (normalerweise eine Firewall oder ein Load-Balancer), das inaktive Sitzungen löscht. Wenn Sie Sitzungs-Keepalives konfigurieren, verhindern die Keepalives, dass Netzwerkgeräte die Sitzung als inaktiv betrachten.

Linux / Unix / Cygwin OpenSSH-Fix :
Der einfachste Fix ist die Aktivierung der SSH-Client-Keepalives. In diesem Beispiel wird alle 60 Sekunden ein ssh-Keepalive gesendet:

ssh -o "ServerAliveInterval 60" <SERVER_ADDRESS>

Wenn Sie dies für alle Ihre Sitzungen aktivieren möchten, geben Sie dies in Ihr /etc/ssh/ssh_configoder ein ~/.ssh/config:

ServerAliveInterval 60

Weitere Informationen finden Sie in der ssh_configManpage

Putty Fix :

Speichern Sie dies in Ihren PuTTY "Standardeinstellungen" ...

  • Klicken Sie auf Verbindung
  • Typ 60 in "Sekunden zwischen Keepalives"

putty_screenshot

Mike Pennington
quelle
21

Neben der Antwort von Mike Pennigton möchte ich Sie auch darauf aufmerksam machen ServerAliveCountMax.

  • Der ServerAliveIntervalsendet alle x Sekunden ein Keepalive (Standard ist 0 , wodurch diese Funktion deaktiviert wird, wenn nichts anderes festgelegt ist).
  • Dies wird ServerAliveCountMaxmal gemacht, wenn keine Antwort eingeht. Der Standardwert ServerAliveCountMaxist 3 (siehe Manpage ssh_config ).

Beispiel: Wenn Sie ServerAliveIntervalauf 60 setzen und so lassen, ServerAliveCountMaxwie es ist, bedeutet dies, dass das Keepalive nur 3 * 60 = 180 seconds = 3 Minuten wartet, bevor es beendet wird.

Um dies auf z. B. 2 Stunden zu erhöhen, in denen versucht wird, die Verbindung aufrechtzuerhalten, können Sie Folgendes tun:

Per Befehl:

Daher sollte man sich überlegen einzustellen

ssh -o "ServerAliveInterval 60" -o "ServerAliveCountMax 120" <SERVER_ADDRESS>

Hartnäckig:

Um es dauerhaft zu machen, schreiben Sie es an /etc/ssh/ssh_config(gilt systemweit) oder ~/.ssh/config(gilt nur für Benutzer):

ServerAliveInterval 60
ServerAliveCountMax 120

Hinweis

Wie dislick richtig hervorhob, ist dies je nach Ihrer Situation möglicherweise nicht das, was Sie wollen:

  • Wenn Sie die Sitzung schnell beenden möchten, sobald der Server nicht mehr antwortet, sollten Sie einen niedrigen Wert für wählen ServerAliveCountMax.
  • Wenn Sie mehr daran interessiert sind , auf eine bereits bestehende Verbindung zu halten (zB mit der Bahn gehen und haben eine hohe Latenz), sollten Sie einen höheren Wert wählen ServerAliveCountMaxerlauben sshzu halten versuchen , die Verbindung wiederherzustellen.

Siehe auch:

Murmeln
quelle
1
Es tut mir leid, aber das ist falsch. ServerAliveCountMaxGibt die Anzahl der Server-Alive-Nachrichten an, die gesendet werden können, ohne dass Nachrichten vom Server zurückgegeben werden. Wenn Sie das Programm beenden möchten ssh, nachdem es eingefroren ist (damit Sie es neu starten können), sollten Sie ServerAliveCountMaxeine niedrige Zahl festlegen . Siehe die Manpage OP verlinkt.
22.
@dislick Ich musste ein wenig darüber nachdenken, aber ich denke, Sie haben je nach Kontext recht, daher habe ich einen Hinweis hinzugefügt, um den Kontext hervorzuheben.
Murmel
2

Ich benutze Mobaxterm und bin auch auf dieses Problem gestoßen. Mobaxterm wird auch mit einer Option ausgeliefert, die den Client am Leben hält, wenn der Client inaktiv ist. Gehe zu Settings -> Configuration -> SSH. Es gibt einen Abschnitt mit dem Titel SSH settings, aktivieren Sie die Option SSH keepalive. Dann sollte das Problem verschwinden.

Bildbeschreibung hier eingeben

jdhao
quelle
funktioniert das "SSH keepalive" in der kostenlosen
Version
Ja es funktioniert. Ihr Problem kann andere Ursachen haben.
JDHAO