
Ich melde mich per SSH bei einem anderen System an und führe dort Skripte aus, die neue Maschinen erstellen und einige Einstellungen vornehmen. Das dauert etwa 7–8 Stunden. Was also passiert ist, ist, dass die SSH-Verbindung immer wieder abbricht und ich immer ein Timeout bekomme, wenn das Skript nicht erfolgreich ausgeführt wird.
Daher verwende ich jetzt dieses Argument zusammen mit der SSH-Verbindung:
ssh -o ServerAliveInterval=60 user@host ....
Dieses SSH wird mehrfach gestartet. Das Problem ist, dass ich nach einigen SSH-Verbindungen den folgenden Fehler erhalte:
too many logins of user
und die nachfolgenden SSH-Verbindungen werden direkt nach erfolgreichen Anmeldungen geschlossen.
Ist es also das Verhalten derServerAliveInterval, das die SSH-Benutzeranmeldesitzung auf dem Remote-Computer aufrechterhält, selbst nachdem die SSH-Arbeit beendet ist, und deshalb meine weiteren Anmeldungen getrennt werden?
Antwort1
Ich glaube nicht, dass dies eine Sitzung aufrechterhält, wenn Ihr Client die Verbindung verliert. Wahrscheinlich sind es diese Optionen auf der Serverseite:
ClientAliveCountMax
Legt die Anzahl der Client-Alive-Nachrichten fest, die gesendet werden können, ohne dass sshd(8) Nachrichten vom Client zurückerhält. Wenn dieser Schwellenwert erreicht wird, während Client-Alive-Nachrichten gesendet werden, trennt sshd die Verbindung zum Client und beendet die Sitzung. Es ist wichtig zu beachten, dass sich die Verwendung von Client-Alive-Nachrichten stark von TCPKeepAlive unterscheidet. Die Client-Alive-Nachrichten werden über den verschlüsselten Kanal gesendet und sind daher nicht fälschbar. Die von TCPKeepAlive aktivierte TCP-Keepalive-Option ist fälschbar. Der Client-Alive-Mechanismus ist wertvoll, wenn der Client oder Server wissen müssen, wann eine Verbindung inaktiv geworden ist.
Der Standardwert ist 3. Wenn ClientAliveInterval auf 15 eingestellt ist und ClientAliveCountMax auf dem Standardwert belassen wird, werden nicht reagierende SSH-Clients nach etwa 45 Sekunden getrennt.
ClientAliveIntervall
Legt ein Timeout-Intervall in Sekunden fest, nach dessen Ablauf sshd(8) eine Nachricht über den verschlüsselten Kanal sendet, um eine Antwort vom Client anzufordern, wenn keine Daten vom Client empfangen wurden. Der Standardwert ist 0, was bedeutet, dass diese Nachrichten nicht an den Client gesendet werden.
Vielleicht liegt die wirkliche Lösung Ihres Problems in der Verwendung eines Terminal-Multiplexers wie screen oder tmux. Diese ermöglichen Ihre Anmeldung und die laufenden Programme, selbst wenn Ihre Verbindung abbricht. Sie können sich zu jedem späteren Zeitpunkt erneut mit dem Terminal verbinden und die Ausgabe der laufenden Programme anzeigen. Sie können damit auch mehr als ein Terminal in Ihrer einzelnen SSH-Verbindung haben. Da Ihr Server Ihre SSH-Sitzungen zu begrenzen scheint, könnte dies ebenfalls nützlich sein. Sie finden einenEinführung zum Bildschirm hier, aber es gibt noch jede Menge andere da draußen.
Antwort2
Liegt es also am Verhalten des
ServerAliveInterval
, das die SSH-Benutzeranmeldesitzung auf dem Remote-Computer aufrechterhält, selbst nachdem die SSH-Arbeit beendet ist, und deshalb meine weiteren Anmeldungen getrennt werden?
Nein. Dies sendet Keepalive-Nachrichten, die Ihre Verbindung überprüfen und automatische Trennungen in SSH oder auf niedrigeren Ebenen verhindern. Wenn Sie lang laufende Skripte starten möchten, sollten Sie auf der Remote-Seite oder nohup
verwenden . Dadurch werden Ihre Skripte auch nach der Trennung weiter ausgeführt und mit den zweiten beiden können Sie die vorhandenen Terminals erneut anschließen.screen
tmux
Antwort3
Diese Fehler treten nach der Aktivierung wahrscheinlich auf, ServerAliveInterval=60
weil Ihre Verbindungen bestehen bleiben. Ihr Muster von SSH-Verbindungen/Befehlen zu diesem Server führt zu mehr gleichzeitigen Verbindungen, als der Server laut Konfiguration zulässt.
Früher brachen Ihre Verbindungen ab, wodurch die Anzahl Ihrer gleichzeitigen Verbindungen geringer war. Der Server war damit zufrieden (keine abgelehnten Verbindungen), Sie jedoch nicht.
Informieren Sie sich über die Konfiguration des Servers im Hinblick auf die maximale Anzahl gleichzeitiger Verbindungen und bleiben Sie entweder innerhalb dieser Beschränkung oder verhandeln Sie mit dem Administrator des Servers, dass die Beschränkung für Sie (oder vielleicht sogar für alle) erhöht wird.