Ich möchte von überall aus eine direkte Verbindung zu einem eingebetteten Linux (genannt C) herstellen können, das keine öffentliche IP-Adresse hat.
C kann eine Verbindung zum Server herstellen (mit SSH-R), und wenn ich mich per SSH beim Server anmelde, kann ich mich anschließend per SSH beim eingebetteten Linux anmelden.
Ich möchte jedoch per SSH vom Client zu C gelangen können, ohne mich zuerst per SSH beim Server anmelden zu müssen. (Ich kann keine Verbindung mit SSH -R von C zum Client herstellen.)
Ist das möglich und wenn ja, wie?
Antwort1
Das geht ziemlich einfach. Eine Möglichkeit ist die Verwendung der Remote-Portweiterleitung von SSH, bei der C dem Server mitteilt, dass er ihm einen Port zurückleiten soll, etwa so:
ssh -R 2222:localhost:22 server
Wenn dieser Befehl von C ausgeführt wird, weist er den Server an, alle Verbindungen zu Port 2222 anzunehmen und an C auf Port 22 weiterzuleiten.
Ebenso könnte man über Firewall-Regeln eine Portweiterleitung auf dem Server einrichten.
Antwort2
Wenn Sie eine Verbindung mit dem weitergeleiteten Port herstellen möchten, benötigen Sie vier Dinge:
- Geben Sie die öffentliche IP/den öffentlichen Hostnamen des Servers als erstes Argument für an
-R
, andernfalls wird nur auf lauschtlocalhost
, was offensichtlich von außerhalb des Servers nicht zugänglich ist. - Konfigurieren Sie den Server mit
GatewayPorts
, damit die weitergeleiteten Ports von außen zugänglich sind - Verwenden Sie den
-g
Schalter, um dasselbe grundsätzlich von der Clientseite aus zuzulassen - Öffnen Sie den Port
2222
in der Server-Firewall.
Der Befehl kann beispielsweise so aussehen:
ssh -g -R server:2222:localhost:22 server