Ich habe zwei Maschinen, Client und Server.
Der Client (der sich hinter einer Unternehmens-Firewall befindet) öffnet mit dem folgenden Befehl einen umgekehrten SSH-Tunnel zum Server, der über eine öffentlich zugängliche IP-Adresse verfügt:
ssh -nNT -R0: localhost: 2222 insecure@server.example.com
In OpenSSH 5.3+ bedeutet das Vorkommen 0
unmittelbar nach dem -R
" Wählen eines verfügbaren Ports", anstatt explizit einen Port anzufordern . Der Grund dafür ist, dass ich keinen Port auswählen möchte, der bereits belegt ist. In Wahrheit gibt es tatsächlich viele Kunden, die ähnliche Tunnel einrichten müssen.
Das Problem an dieser Stelle ist, dass der Server nicht weiß, welcher Client welcher ist. Wenn wir eine Verbindung zu einem dieser Clients (über localhost) herstellen möchten, woher wissen wir dann, welcher Port auf welchen Client verweist?
Mir ist bekannt, dass ssh die Portnummer an die Befehlszeile meldet, wenn es auf die oben beschriebene Weise verwendet wird. Ich möchte jedoch auch autossh verwenden, um die Sitzungen am Leben zu erhalten. autossh führt seinen Child-Prozess vermutlich über fork / exec aus, sodass die Ausgabe des eigentlichen ssh-Befehls im Ether verloren geht.
Außerdem kann ich mir keine andere Möglichkeit vorstellen, um den Remote-Port vom Client abzurufen. Daher frage ich mich, ob es eine Möglichkeit gibt, diesen Port auf dem Server zu bestimmen.
Eine Idee, die ich habe, ist, irgendwie / etc / sshrc zu verwenden, was angeblich ein Skript ist, das für jede Verbindung ausgeführt wird. Ich weiß jedoch nicht, wie man hier die relevanten Informationen erhält (vielleicht die PID des jeweiligen SSHD-Prozesses, der diese Verbindung verarbeitet?). Ich würde gerne einige Hinweise erhalten.
Vielen Dank!