it-swarm.com.de

Welche Optionen `ServerAliveInterval` und` ClientAliveInterval` in sshd_config genau ausführen?

Ich habe diese Frage gefunden, aber es tut mir leid, dass ich die Einstellungen für die beiden in der akzeptierten Antwort erwähnten Variablen ServerAliveInterval und ClientAliveInterval nicht ganz verstehe. Sollte ich diesen Wert auf Null setzen, wenn mein lokaler Server eine Zeitüberschreitung aufweist? Wird es dann nie eine Auszeit geben? Soll ich es stattdessen auf 300 Sekunden oder so einstellen?

Meine Frage ist einfach, dass einige meiner Verbindungen eine Zeitüberschreitung aufweisen, wenn ich meinen Laptop mit der Antwort Write failed: Broken pipe Suspendiere und dann wieder aufhänge, andere nicht. Wie kann ich einen lokalen sshd richtig konfigurieren, damit er nicht mit einer kaputten Pipe ausfällt?

177
M. Tibbits

ServerAliveInterval : Anzahl der Sekunden, die der Client wartet, bevor er ein Nullpaket an den Server sendet (um die Verbindung aufrechtzuerhalten) .

ClientAliveInterval : Anzahl der Sekunden, die der Server wartet, bevor er ein Nullpaket an den Client sendet (um die Verbindung aufrechtzuerhalten) .

Wenn Sie den Wert 0 (Standardeinstellung) festlegen, werden diese Funktionen deaktiviert, sodass Ihre Verbindung unterbrochen werden kann, wenn sie zu lange inaktiv ist.

ServerAliveInterval scheint die häufigste Strategie zu sein, um eine Verbindung aufrechtzuerhalten. Um das Problem mit unterbrochenen Rohren zu vermeiden, ist hier die SSH-Konfiguration, die ich in meiner .ssh/config-Datei verwende:

Host myhostshortcut
     HostName myhost.com
     User barthelemy
     ServerAliveInterval 60
     ServerAliveCountMax 10

Die obige Einstellung funktioniert folgendermaßen:

  1. Der Client wartet 60 Sekunden im Leerlauf (ServerAliveInterval-Zeit) und sendet ein "No-Op-Null-Paket" an den Server und erwartet eine Antwort. Wenn keine Antwort eingeht, wird der oben beschriebene Vorgang bis zu 10 Mal (ServerAliveCountMax) (600 Sekunden) fortgesetzt. Wenn der Server immer noch nicht antwortet, trennt der Client die SSH-Verbindung.

ClientAliveCountMax auf der Serverseite kann ebenfalls hilfreich sein. Dies ist die Grenze dafür, wie lange ein Client nicht reagieren darf, bevor er getrennt wird. Der Standardwert ist 3, wie in drei ClientAliveInterval.

227
Barthelemy

Dies wird in sshd_config Handbuch (man sshd_config):

ClientAliveInterval

Legt ein Zeitlimit in Sekunden fest. Wenn keine Daten vom Client empfangen wurden, sendet sshd eine Nachricht über den verschlüsselten Kanal, um eine Antwort vom Client anzufordern. Der Standardwert ist 0, was darauf hinweist, dass diese Nachrichten nicht an den Client gesendet werden. Diese Option gilt nur für Protokollversion 2.

ClientAliveCountMax

Der Standardwert ist 3. Wenn ClientAliveInterval (siehe unten) auf 15 gesetzt ist und ClientAliveCountMax auf dem Standardwert belassen wird, werden nicht reagierende SSH-Clients nach ca. 45 Sekunden getrennt. Diese Option gilt nur für Protokollversion 2.

Informationen zu den Clientoptionen finden Sie in der Erläuterung in man ssh_config:

ServerAliveInterval

Legt ein Zeitlimit in Sekunden fest. Wenn keine Daten vom Server empfangen wurden, sendet ssh eine Nachricht über den verschlüsselten Kanal, um eine Antwort vom Server anzufordern. Der Standardwert ist 0, was darauf hinweist, dass diese Nachrichten nicht an den Server gesendet werden. Diese Option gilt nur für Protokollversion 2.

ServerAliveCountMax

Der Standardwert ist 3. Wenn beispielsweise ServerAliveInterval auf 15 gesetzt ist und ServerAliveCountMax auf dem Standardwert belassen wird und der Server nicht mehr reagiert, wird ssh nach ca. 45 Sekunden. Diese Option gilt nur für Protokollversion 2.

Basierend auf oben bedeutet 0, dass es deaktiviert ist. Daher sollten Sie diese Werte hoch genug einstellen, um Rohrbruch Fehler zu vermeiden.

29
kenorb

Die Antwort von Barthelemy ist cool, geht aber dem Problem nicht wirklich auf den Grund. Sie halten Ihren Computer an und möchten, dass die SSH-Sitzung beim Starten Ihres Computers noch aktiv ist.

Es gibt keine solche Konfiguration für ssh, die die Verbindung so am Leben erhält. SSH verwendet TCP. Zunächst benötigen Sie den Drei-Wege-Handshake und bleiben nach einiger Leerlaufzeit am Leben. Wenn Sie alle Ihre TCP -Verbindungen) mit FIN schließen/in den Ruhezustand versetzen, können Sie dies nicht überwinden.

Für eine schmutzige Problemumgehung können Sie VPS oder eine andere Online-Box mit Bildschirm verwenden, um die Verbindung aufrechtzuerhalten. Mein Rat tut dies aus Sicherheitsgründen nicht.

20
3h4x

Da Sie nicht garantieren können, dass eine SSH-Verbindung (TCP) bestehen bleibt, sobald ein Ende keine ACKs mehr an empfangene Pakete sendet, verwende ich persönlich http://www.harding.motd.ca/autossh/ = um alle meine SSH-Verbindungen neu zu starten, sobald ich die Suspendierung aufhebe.

Da GNU Screen) auf der Serverseite verwendet wird, bringt mich das erneute Anhängen dahin, wo ich vorher war.

Sie können es auf zusätzlichen Ports abhören lassen, damit es ständig überprüft, ob die Verbindungen noch aktiv sind, aber ich persönlich finde, dass es gut funktioniert, wenn es deaktiviert ist und sich nur auf SSHs eigenes ServerAliveInterval/ServerAliveCountMax verlässt.

Eine weitere Option ist http://mosh.mit.edu/ , die UDP verwendet und sich nahtlos von einem langfristigen Mangel an Konnektivität erholt.

16
grifferz

Sie können Befehle auch mit Nohup ausführen, wenn Sie möchten, dass sie unabhängig von Ihrer SSH-Verbindung ausgeführt werden.

z.B.

$ Nohup tar -xzf some_huge.tar.gz &

Das & ist meiner Meinung nach nicht notwendig, aber es ist praktisch, da der Prozess dadurch im Hintergrund ausgeführt wird, sodass Sie andere Aufgaben ausführen können.

Ich verwende Nohup immer für alle Prozesse, die eine Weile dauern, damit ich nicht von vorne beginnen muss, wenn ich die Verbindung aus irgendeinem Grund verliere - Stromausfall (an meinem Remote-Standort, offensichtlich nicht auf dem Host), Netzwerkausfall, was auch immer.

5
Buttle Butkus

Stellen Sie Ihre lange laufende Sitzung in den Bildschirm. Weitere Informationen finden Sie unter Bildschirm -h

Auf diese Weise können Sie mit ssh erneut eine Verbindung zum Computer herstellen und erneut eine Verbindung zur Bildschirmsitzung herstellen

1
user180529