Da ich immernoch an das Drahtlose Bürgernetz gefesselt bin, muss ich ständig mit einer instabilen Leitung kämpfen die dafür sorgt das meine SSH Verbindungen und Tunnel einfach mal zusammenklappen.
Für die Tunnel hatte ich mir schon vor einiger Zeit ein Skript geschrieben, welches mir bereits bestehende Tunnel zuerstmal abschießt und dann erst wieder neu aufbaut. Transparent geht das aber auch nur mittels eines Cron Jobs und der heißt dann wieder nutzloser Verbindungsoverhead :(
Gestern wollte ich mich eigentlich aus ganz anderem Grund mit dem Filesystem in Userspace (fuse) beschäftigen als mir das Tool autossh ins Auge viel. Dieses macht eben genau das was ich brauche, im einfachsten Fall prüft es in vorgegeben Zeitabständen ob die SSH-Verbindung noch besteht und reaktiviert sie wenn notwendigt.
In Verbindung mit Screen auf Serverseite kann man damit auch sehr angenehm remote auf einem anderen Rechner arbeiten. Wichtig ist dabei nur der Parameter -t damit eine Pseudo Termialverbindung hergestellt wird. Die Screen Parameter -D und -R veranlassen das entfernte Screen die letzte aktive Sitzung zu detachen und direkt dannach wieder zu verbinden.
autossh -t host "screen -D -R"
Wunderbar funktioniert das auch mit SSH-Tunneln. Sie Syntax ist dabei ebenfalls die selbe wie beim aufbau eines normalen SSH-Tunnels.
autossh -f -N -C -L2143:hostname:143 user@hostname
Vermutlich um Konflikte mit den klassischen SSH-Parametern zu vermeiden ist es nicht möglich die Einstellungen von autossh über solche zu steuern, daher werden diese über Umgebungsvariablen gesteuert. Verwendet man autossh regelmäßig bietet es sich also an diese in seinen shellrc file zu übernehmen.
export AUTOSSH_GATETIME=30 => das erste Mal nach 30 Sekunden die Verbindung prüfen
export AUTOSSH_POLL=15 => aller 15 Sekunden die Verbindung prüfen