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.
quelle
Antworten:
Wenn Sie für 'LogLevel' in der Konfigurationsdatei sshd_config den Wert DEBUG1 (oder einen beliebigen DEBUG-Level) festlegen, protokolliert sshd die Portnummern in /var/log/auth.log.
Denken Sie daran, dass die Verwendung eines LogLevel von DEBUG oder höher ein Datenschutzrisiko darstellen kann, da viel protokolliert wird.
(Aus /var/log/auth.log wurden einige Zeilen entfernt, um relevante Informationen anzuzeigen.)
Wenn Sie dem folgen, können Sie sehen, wo Sie die Verbindungsinformationen und dann den weitergeleiteten Port (in diesem Fall 39813) analysieren können.
Ich habe diese Befehlszeile zwischen zwei meiner Computer verwendet. Ich habe die SSH-Schlüssel-Anmeldung eingerichtet, sodass keine Passwortabfragen oder Verzögerungen auftreten
-N gibt an, dass kein Befehl angegeben wird, und -T beendet die Zuweisung eines tty für diese Verbindung.
Eine andere Möglichkeit, die Portverbindungsinformationen zu verbreiten, besteht darin, sie vom Client aus zu analysieren und eine E-Mail, einen Jabber, eine SMS, Rauchsignale oder eine Taube zu senden, um die Portnummer an den Benutzer zu senden, der sie benötigt.
quelle
Sie können den Befehl stderr
ssh
in ein Programm leiten, das eine Verbindung zu einem Server auf dem Zielcomputer herstellt und dessen Computernamen / IP-Adresse / Seriennummer / was auch immer zusammen mit der Portnummer meldet. Art davon:quelle