SSH in einen Server ohne öffentliche IP von einem Server ohne öffentliche IP, der hinter einem Server mit öffentlicher IP versteckt ist

SSH in einen Server ohne öffentliche IP von einem Server ohne öffentliche IP, der hinter einem Server mit öffentlicher IP versteckt ist

Ich habe folgendes Setup: Ich möchte von Maschine C aus auf Maschine A zugreifen, aber keine der beiden hat eine öffentliche IP-Adresse. Maschine C befindet sich jedoch im selben Netzwerk wie Maschine B, die über einen öffentlichen IP-Zugriff verfügt. Daher kann ich von überall auf Maschine C zugreifen, indem ich zuerst per SSH auf Maschine B und von dort per SSH auf Maschine C zugreife. Auf Maschine B habe ich keinen Root-Zugriff, während dies auf Maschine A und CI der Fall ist. Zur Verdeutlichung siehe das folgende Diagramm:

machine A          machine B      machine C
no public IP       public IP      no public IP
root access        no root access root access     
how to access?    '---------------------------'
                           same network
                       hence both accessible

Eine dumme Lösung wäre, dass Maschine A regelmäßig eine Datei auf Maschine C aufspürt (durch den oben beschriebenen zweistufigen SSH-Zugriff) und jedes Mal, wenn ein Befehl in dieser Datei erscheint, diesen ausführt und die Ausgabe über SSH irgendwo auf Maschine C schreibt. Ich frage mich allerdings, ob SSH die Verbindung irgendwie „umkehren“ kann, sodass Maschine A sich in zwei Schritten mit Maschine C verbindet und die Verbindung dann „umgekehrt“ wird, sodass Maschine C tatsächlich über die Remote-Shell von Maschine A verfügt? Und wenn ja, wie mache ich das?

Antwort1

Sie müssen möglicherweise machineAeinen SSH-Tunnel zu öffnen machineB, mit einer Remote-Weiterleitungsoption, die Ihnen einen SSH-Zugriff machineAvon ermöglicht machineB.

Wenn Sie Root-Zugriff auf haben machineB, setzen Sie die GatewayPortsKonfigurationsoption auf yesin /etc/ssh/sshd_configund geben Sie dann diesen Befehl auf ein machineA:

ssh -N -R 0.0.0.0:2222:127.0.0.1:22 the_public_ip_of_machine_B

Dadurch wird Port 2222 auf geöffnet machineBund der gesamte Datenverkehr auf diesem Port wird an Port 22 weitergeleitet. Beachten Sie, dass alle Schnittstellen abgehört werden, auch die öffentliche, daher sollten Sie Port 2222 per Firewall schützen (aber wahrscheinlich ist bei Ihnen machineBohnehin eine Firewall aktiviert). Während dieser Tunnel aktiv ist, können Sie per SSH machineBauf Port 2222 zugreifen und gelangen so zu machineA. Da machineBund machineCsich im selben Subnetz befinden, können Sie sich in einem Schritt machineAvon bei anmelden machineC.

Wenn Sie keinen Root-Zugriff auf haben machineB, ist der Vorgang derselbe, mit Ausnahme der Abhöradresse. Wenn GatewayPortsauf gesetzt ist no(was die Standardeinstellung ist), 0.0.0.0wird das erste Argument () einfach ignoriert und die Abhöradresse wird an gebunden 127.0.0.1. In diesem Fall können Sie den Befehl von oben trotzdem verwenden und die Weiterleitung funktioniert genauso, aber der geöffnete Port ist von nirgendwo anders als von aus verfügbar machineB. Sie müssen also per SSH auf zugreifen machineBund dann per SSH auf localhost, Port 2222, wodurch Sie zu gelangen machineA.

Möglicherweise möchten Sie jedoch eine robustere Lösung verwenden, beispielsweise ein VPN.

verwandte Informationen