SSH-Tunnel in einer Schleife laufen lassen; schlechte Idee? Port bereits verwendet?

SSH-Tunnel in einer Schleife laufen lassen; schlechte Idee? Port bereits verwendet?

Ich habe einen SSH-Tunnel von einem Server, der sich physisch an meinem Arbeitsplatz befindet (auf ihm läuft CentOS), zu meinem Zuhause (Ubuntu) eingerichtet, sodass ich mich von zu Hause aus in meinen Arbeitstunnel einloggen kann, indem ich auf dem Arbeitscomputer einen Befehl wie diesen verwende:

ssh -R 49666:localhost:22 homename@homeIP -N

Ich habe die Schlüssel eingegeben usw. Ich bin per SSH von der Arbeit nach Hause gegangen und dann, während ich remote an meinem Heimcomputer saß, per SSH zurück zur Arbeit, um es zu testen. Es schien in Ordnung zu sein, es hat funktioniert. Ich konnte Dateien in beide Richtungen per SCP senden usw.

Als ich später nach Hause kam, stellte ich fest, dass der Tunnel aus irgendeinem Grund gesperrt war. Ich konnte nicht herausfinden, warum. Später fragte ich einen Kollegen danach und er sagte, er habe das gleiche Problem und verwende ein Skript wie dieses, das ständig auf seinem Arbeitscomputer läuft:

while true
 ssh -R 49666:localhost:22 homename@homeIP -N
 sleep 15

Er lässt dies grundsätzlich dauerhaft laufen, um einen defekten Tunnel automatisch neu zu starten, wenn er kaputt geht.

Ich habe das auch versucht, habe die Tests durchgeführt (per SSH von der Arbeit nach Hause, während ich physisch bei der Arbeit war, aber meinen Heimcomputer benutzte) und es schien wieder in Ordnung zu sein. Aber als ich wieder nach Hause ging, funktionierte der Tunnel nicht. Ich habe auth.log durchgesehen und diese drei Zeilen mit demselben Zeitstempel gefunden, also ungefähr zu der Zeit, als ich auf halbem Weg nach Hause war:

Accepted publickey from work IP (I erased the rest for my privacy)
error: bind: Address already in use
error: channel_setup_fwd_listener_tcpip: cannot listen to port: 49666

Es scheint, als hätte es versucht, meinen Tunnel an Port 49666 zu binden, während etwas anderes ihn benutzte. Okay, ich verstehe, warum das fehlschlagen würde. Also habe ich versucht, herauszufinden, was Port 49666 benutzt, damit ich es beenden kann. Aber es scheint nichts zu geben. Ich habe es mit netstat, lsof usw. versucht. Nichts benutzt Port 49666. Ich glaube, außer dem Tunnel benutzt NIEMALS irgendetwas Port 49666. Könnte es sein, dass es den Tunnel erstellt hat, als der Tunnel bereits existierte? Oder würde das Tunneling-Looping-Skript einfach nichts tun, wenn der Tunnel bereits existierte?

Da Port 49666 nicht verwendet wird, würde ich erwarten, dass der Tunnel automatisch wiederhergestellt wird, wenn das Tunnelskript auf meinem Arbeitscomputer erneut durch die Schleife läuft, aber das scheint nicht der Fall zu sein.

Gibt es eine Möglichkeit, das Problem zu lösen, ohne physisch zum Server bei der Arbeit zurückzukehren? Oder es zumindest mit nur einer Optimierung zu lösen, sodass ich nicht regelmäßig zurückkehren muss?

Der Server schaltet sich nie ab, also sollte das sich wiederholende Skript theoretisch weiterlaufen. Aber würde es sich vielleicht selbst beenden, wenn es den Tunnel nicht herstellen kann?

verwandte Informationen