SSH Verbindungsabbrüche/Timeout mit KeepAlive verhindern
Ich hatte die letzten Tage das Problem, dass ich Server mittels Transmit ((verwendet seinerseits MacFUSE, dort dürfte also die selbe Problematik herrschen wenn in der Verbindung eine Firewall gerne mal Idle-Verbindungen trennt)) per SFTP auf meinem Desktop als Laufwerk eingebunden habe und die Verbindung jedoch nach gewissen Idle-Zeiten immer von der Firewall als tot empfunden wurde und geschlossen wurde. Effektiv führte das dann dazu, dass die virtuelle Festplatte von Transmit vollkommen versagte und die schönsten I/O-Fehler um sich warf.
Abhilfe schaffte dann ein Eintrag in die ssh_config um den Server alle paar Sekunden mit einem KeepAlive zu belästigen welches dann auch die Firewall als Aktivität nicht missverstehen kann. Das selbe hilft auch gegen abgebrochene Terminal-Sessions oder steckenbleibende SSH-Tunnel durch die plötzlich keine Daten mehr ankommen. Meistens hat hier dann einfach eine Firewall die Verbindung unterbrochen oder ein Router das Interesse an der NAT der Verbindung verloren.
Insgesamt gibt es sogar 2 Möglichkeiten das Problem zu lösen, die entsprechende KeepAlive-Option kann nämlich sowohl auf dem Server als auch auf dem Client gesetzt werden.
Auf dem Client:
Die Konfiguration von ssh liegt unter Mac OS X hier:
- Global: /etc/ssh_config
- Benutzer: ~/.ssh/config
Wenn es die Datei noch nicht gibt, muss diese einfach nur angelegt werden.
In die Datei muss dann folgender Eintrag eingefügt werden:
ServerAliveInterval 30
ServerAliveCountMax 3
Wobei ServerAliveInterval 30 die Anzahl an Sekunden zwischen zwei KeepAlive Signalen ist. Dieser Wert sollte also etwas unter der minimalen Zeit liegen die bis zu einem Verbindungsabbruch vergeht. Die ServerAliveCountMax gibt mit 3 die Anzahl an fehlgeschlagenen KeepAlive-Signalen an bis die Verbindung als abgebrochen gilt.
Auf dem Server:
Hier ist die Schuldige Datei meistens unter
- /etc/ssh/sshd_config
zu finden.
Der entsprechende Eintrag lautet hier:
ClientAliveInterval 30
ClientAliveCountMax 3
Auch hier ist die ClientAliveInterval die entsprechende Angabe in Sekunden bis zu einem neuen KeepAlive Signal und ClientAliveCountMax die maximale Anzahl an versuchen bis zum Verbindungsabbruch.
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.