Beim Erstellen von Reverse-Tunneln in neueren OpenSSH-Versionen kann ein Remote-Port von 0 angegeben werden, um jeden verfügbaren Port zu binden:
-R [Bindeadresse:] Port: Host: Hostport
...
Wenn das port-Argument "0" ist, wird der Listen-Port dynamisch auf dem Server zugewiesen und zur Laufzeit an den Client gemeldet.
openssh ssh client manpage
Meine Frage ist, wie ich (auf automatisierte Weise) diese Portzuordnung auf dem Server ermitteln kann. Es scheint wenig hilfreich zu sein, dass es an den Host gemeldet wird, auf dem der ssh-Client ausgeführt wird - nicht jedoch an das Ziel, das Verbindungen zu diesem Port herstellen möchte, um auf Dienste auf dem Client zuzugreifen.
Zwei ähnliche Optionen, die ich mir vorstellen kann, laufen entweder
# netstat -ntlp
auf dem Server und suchen Sie nach verdächtigen Ports, die an 127.0.0.1 durch sshd gebunden sind, oder indem Sie die Ausgabe von
# lsof -p $PPID | grep TCP | grep LISTEN
Aber beides ist aus Sicht der Automatisierung nicht angenehm, und es gibt keine Möglichkeit, die dynamischen Ports mit dem Ursprungs-Service-Port zu verknüpfen, wenn mehr als ein solcher Tunnel erstellt wird.
Fehlt irgendetwas, um eine Liste der aktiven Tunnel (sowohl lokale als auch Remote-Portnummern) auf der Seite des SSHD-Servers effektiv abzurufen, wie eine Entsprechung zur Umgebungsvariablen SSH_CONNECTION, aber für aktive Tunnel?
In einigen Fällen versuche ich, potenziell sehr viele gleichzeitige Reverse-Tunnel für einen Host zu erstellen und auf vielen verschiedenen Hosts auf dieselbe Portnummer zurückzutunneln. Das automatische Verwalten des Port-Pools durch den TCP-Stack scheint die effektivste Methode zu sein.