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
quelle
dev tun
beide verwendet undremote
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.Antworten:
autossh wird auf Ihrem Client-Computer ausgeführt, sodass der ssh-Daemon-Prozess auf dem Server nicht direkt abgebrochen werden kann. Sie können jedoch einen Wert ungleich Null für
ClientAliveInterval
in/etc/ssh/sshd_config
auf dem Server angeben (sieheman sshd_config
) und den sshd-Dienst auf dem Server neu starten, um die Konfigurationsänderung anzuwenden. Im Falle einer Netzwerkunterbrechung wird der ssh-Daemon-Prozess nachClientAliveInterval * ClientAliveCountMax
Sekunden beendet (jedoch nicht durch Autossh).Nun, wenn Sie fragen wollten: "Warum beendet autossh den SSH-Client-Prozess nicht?" haben Sie angegeben
-M 0
. Von der Autossh-Manpage:Setting the monitor port to 0 turns the monitoring function off, and autossh will only restart ssh upon ssh's exit
.Anstatt autossh zum Überwachen der Verbindung zu verwenden, warten Sie darauf, dass ssh nach einer Zeitüberschreitung von
ServerAliveCountInterval * ServerAliveCountMax
Sekunden beendet wird. Sie haben 60 Server-Alive-Überprüfungen angefordert, bevor ssh beendet wird, wobei ein Intervall von 60 Sekunden aufeinanderfolgende Überprüfungen voneinander trennt. Sie müssen also eine Stunde warten, bevor Ihr ssh-Client beendet wird.Sie können auch die
ExitOnForwardFailure
Option auf der Clientseite verwenden (sieheman ssh_config
), damit ssh beendet wird, wenn kein Tunnel eingerichtet werden kann, und autossh dann versuchen kann, ssh erneut zu starten.quelle
-M 0
: Es ist nicht einfach, einen Überwachungsport zu verwenden, und es wird indirekt davon abgeraten: In vielerlei Hinsicht ist dies möglicherweise eine bessere Lösung als der Überwachungsport