SSH durch SSH-Tunnel weiterleiten

30

Meine Situation :

Ich (localhost) -> Server A (ip: 100.100.100.100) => (Server B (ip: 192.168.25.100), Server ....)

Ich bin in der Lage zu SSH in Server, da es eine wahre IP hat, wenn ich dann eine Verbindung zu Server B herstellen möchte, würde ich Server B mit seiner IP ssh (192.168.25.100)

Beispiel:

von meinem pc:

ssh [email protected]

dann in 100.100.100.100,

ssh [email protected]

dies würde mich mit ssh zu Server B bringen

Was ist, wenn ich eine direkte Verbindung zu Server B herstellen möchte? wie kann ich das machen?

Beispiel:

von meinem oc:

[email protected]

Ich habe Folgendes versucht:

ssh -L 22:localhost:22 [email protected]

ohne Erfolg

tom91136
quelle

Antworten:

30

Ihr Problem besteht darin, einen Listener an localhost zu binden: 22; da hört schon ein sshd drauf. Das Tunneln einer ssh-Verbindung über eine ssh-Verbindung ist völlig legal, und ich mache das die ganze Zeit, aber Sie müssen nicht verwendete Ports für Ihre Weiterleitungs-Listener auswählen.

Versuchen

me% ssh [email protected] -L 2201:192.168.25.100:22

dann

me% ssh localhost -p 2201

Sie sollten auf Server B landen (es sei denn, etwas ist bereits an mich gebunden: 2201, in diesem Fall wählen Sie einen anderen Port).

MadHatter unterstützt Monica
quelle
Danke für die schnelle Antwort! es funktioniert jedoch, wie kann ich alle verbindungen weiterleiten anstatt nur ssh (22)?
tom91136
1
Das ist ein ausgewachsenes VPN, das Sie suchen, nicht nur die Portweiterleitung. Unter bodhizazen.net/Tutorials/VPN-Over-SSH wird beschrieben, wie man vpn-over-ssh ausführt. Es ist jedoch ein Remote-Root-Zugriff über ssh auf A erforderlich. Sie benötigen das Privileg für A, um diese Funktionen nutzen zu können.
MadHatter unterstützt Monica
Vielen Dank, eine letzte Sache, was ist, wenn ich nur mit A verbinden möchte?
tom91136
me% ssh [email protected]; haben wir das nicht schon besprochen? oder meinst du "was ist, wenn ich ein vollwertiges VPN zu A haben will?", in welchem ​​Fall steht meine Antwort.
MadHatter unterstützt Monica
1
Wenn Sie VPN über SSH verwenden möchten, haben Sie auf dem Server keinen Root-Zugriff, aber Python, versuchen Sie es mit sshuttle .
André Paramés
23

Sie müssen die SSH-Portweiterleitung nicht verwenden, um über einen Proxy in einen internen Computer zu sshen. Sie können die ssh-Funktion verwenden, um einen Befehl auf dem ersten Server auszuführen, zu dem Sie eine Verbindung herstellen, um ssh auf einen dritten Computer zu übertragen.

ssh -t [email protected] ssh [email protected]

Die -tOption zwingt ssh, eine Pseudotty zuzuweisen, damit Sie einen interaktiven Befehl ausführen können.

Dies kann auch mit SSH-Schlüsseln funktionieren. Wenn Sie Ihren privaten und öffentlichen Schlüssel auf Computer A und Ihren öffentlichen Schlüssel in den Dateien für autorisierte Schlüssel auf Computer B und C haben, können Sie die -AOption zum Weiterleiten der Authentifizierungsagentenverbindung verwenden.

Jeff Strunk
quelle
10

Ich habe eine andere Lösung verwendet. Ich habe eine ProxyCommandOption verwendet (hier in ~/.ssh/config):

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

Dies baut keinen Port-zu-Port-Tunnel auf, sondern tunnelt ssh mithilfe von Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Standard-Tunnel. Diese Methode hat den Nachteil, dass tatsächlich drei SSH-Verbindungen authentifiziert werden müssen. Um eine Verbindung zum internen Host herzustellen, geben Sie einfach Folgendes ein:

ssh myinsidehost2

... Sie müssen sich also nicht um die Auswahl einer IP-Adresse für diesen Tunnel kümmern.

Liori
quelle
1
Dies ist die einzige Art von SSH-Stacking, die meiner Meinung nach funktioniert. Ich habe versucht, corkscrewoder nc( netcat), aber keine Arbeit so nahtlos wie diese.
Phuong Nguyen
7

Laut der SSH-Manpage ist ProxyCommand die richtige Methode

Die Syntax lautet:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null
Packeteer
quelle
Ich bin nicht sicher, ob die -WOption vorhanden war, als diese Frage beantwortet wurde. Aber mit neueren Versionen des ssh-Clients bin ich einverstanden, dass die Kombination von ProxyCommandund -Wdie bevorzugte Methode ist. Fügen Sie möglicherweise einen Kontext hinzu, der sowohl die Verwendung in der Befehlszeile als auch ein Beispiel für einen Abschnitt für zeigt .ssh/config.
Kasperd
Haben Sie eine Idee, wo Sie die Änderungsprotokolle / Versionsinformationen finden, aus denen hervorgeht, welche SSH-Versionen den -WBefehl haben und welche nicht? Ein bisschen googeln hat mir nicht schnell
geantwortet
-WWurde mit OpenSSH 5.4 eingeführt und 2010 veröffentlicht. Die Antwort lautet also yes @kasperd
0xC0000022L
7

Ab OpenSSH 7.3 (Ende 2016) ist die ProxyJump- Einstellung der einfachste Weg . In Ihrem ~/.ssh/config:

Host B
  ProxyJump A

Oder in der Befehlszeile,, -J B.

arantius
quelle