Ich habe mein Autossh mit einer Abstimmungszeit von 30 s gestartet:
AUTOSSH_POLL=30 AUTOSSH_LOGLEVEL=7 autossh -M 0 -f -S none -f -N -L localhost:34567:localhost:6543 user1@server1
Und es funktioniert gut:
Sep 5 12:26:44 serverA autossh[20935]: check on child 23084
Sep 5 12:26:44 serverA autossh[20935]: set alarm for 30 secs
Wenn ich jedoch das Netzwerkkabel physisch entferne, was bedeutet, dass der Tunnel nicht mehr funktioniert, tötet autossh den ssh-Daemon nicht. Warum? Ich verstehe, dass autossh nichts tun kann, wenn der Link nicht funktioniert, aber meiner Meinung nach sollte es versuchen, Folgendes zu tun:
- Überprüfen Sie den untergeordneten ssh-Prozess (
check on child ...
) - Überprüfen Sie das ferne Ende !!! (eine pingartige Operation durch den Tunnel)
- Erkenne, dass der Tunnel unten ist
- Stoppen Sie den SSH-Prozess
- Versuchen Sie erneut, den Tunnel zu erstellen
- Stellen Sie fest, dass es nicht funktioniert, und richten Sie einen (exponentiell ansteigenden?) Timer ein, um ihn bald erneut zu überprüfen
Deshalb führe ich autossh aus: Wenn etwas mit dem Tunnel passiert (sei es ein Software- oder Hardwareproblem), sollte er versuchen, ihn neu zu starten. Stattdessen wartet es nur darauf, dass der SSH-Prozess stirbt. Sollte es nicht versuchen, es neu zu starten, auch wenn keine Hoffnung besteht, die Verbindung wiederherzustellen?
Welche Art von Scheck macht Autossh? Stellen Sie einfach sicher, dass das SSH funktioniert. Führt es keine Fernprüfung durch?
Bearbeiten
Wie gewünscht füge ich den relevanten Teil der ssh-Konfiguration hinzu:
# (see http://aaroncrane.co.uk/2008/04/ssh_faster)
# The ServerAliveInterval tells SSH to send a keepalive message every 60 seconds while the connection is open;
# that both helps poor-quality NAT routers understand that the NAT table entry for your connection should
# be kept alive, and helps SSH detect when there’s a network problem between the server and client.
ServerAliveInterval 60
# The ServerAliveCountMax says that after 60 consecutive unanswered keepalive messages, the connection should
# be dropped. At that point, AutoSSH should try to invoke a fresh SSH client. You can tweak those
# specific values if you want, but they seem to work well for me.
ServerAliveCountMax 60
TCPKeepAlive yes
dev tun
beide verwendet und remote
in der Client-Konfiguration festgelegt wurden. Das einzig ärgerliche ist, die Zertifikate zu verwalten. Wir verwenden die mit openVPN gelieferte 'easy-rsa'-Zertifizierungsstelle. Sobald Sie die Zertifikate haben, ist der Rest einfach.