it-swarm.com.de

Leiten Sie den SSH-Verkehr über eine mittlere Maschine weiter

SSH-Tunneling ist für mich sehr verwirrend. Ich frage mich, ob ich das unter Linux machen kann.

Ich habe 3 Maschinen ..

A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.

Also kann ich von A -> B und von B -> C SSH, aber nicht von A -> C.

Gibt es eine Möglichkeit, einen SSH-Tunnel von A bis B einzurichten? Wenn ich also andere SSH-Befehle ausführe, funktionieren diese nur von meinem lokalen Computer A aus. Ich versuche im Grunde, ein Git-Repo von der Arbeit nach Hause zu klonen (und ich kann Git nicht auf Maschine B installieren).

Auch einmal eingerichtet .. Wie würde ich es auch deaktivieren?

109
PKKid

Fügen Sie dies in Ihre .ssh/config -Datei auf hostA ein (siehe man 5 ssh_config für Details):

# .ssh/config on hostA:
Host hostC
    ProxyCommand ssh hostB -W %h:%p

Jetzt wird der folgende Befehl automatisch durch hostB getunnelt

hostA:~$ ssh hostC

Sie können Optionen wie -oCiphers=arcfour und -oClearAllForwardings=yes hinzufügen, um die Arbeit zu beschleunigen, da das Einbinden von ssh in ssh rechenintensiver ist und der zusätzliche Aufwand und der Wrapper nicht so sicher sein müssen, wenn bereits verschlüsselter Datenverkehr getunnelt wird.


Wenn Sie OpenSSH vor 5.3 verwenden, ist die Option -W nicht verfügbar. In diesem Fall können Sie das Obige mit netcat (nc) implementieren:

ProxyCommand ssh hostB nc %h %p  # or netcat or whatever you have on hostB
125
ephemient

Bearbeiten: Dies ist der falsche Ansatz. Siehe stattdessen die Antwort von ephemient . Diese Antwort wird funktionieren, ist aber möglicherweise weniger sicher und definitiv weniger beeindruckend.

Es hört sich so an, als wollten Sie eine Lösung wie die folgende:

ssh -L localhost:22:machinec:22 machineb

Dadurch erhalten Sie eine Shell für machineb. Lass das in Ruhe; minimieren Sie das Terminalfenster.

Wenn Sie jetzt eine SSH-Verbindung zu localhost herstellen, werden Sie tatsächlich über machinec mit machineb verbunden. Wenn Sie mit dem Tunnel fertig sind, schließen Sie einfach das Terminal, in dem Sie den obigen Befehl ausgeführt haben.

Beachten Sie, dass Sie Superuser-Berechtigungen benötigen, um den Befehl auszuführen.

6
Wesley

Klingt so, als ob Sie einen Shell-Alias ​​auf A haben möchten, der dazu führt, dass ssh auf C auftritt

  1. Ich gehe davon aus, dass Sie auf A ssh me @ b "ssh me @ c hostname" eingeben und "C" zurückholen können.
  2. Erstelle einen Alias ​​sshc, der sshc foo zu ssh me @ b "ssh me @ c foo" erweitert
  3. Die genaue Syntax zum Erstellen des Alias ​​finden Sie unter superuser.com
3
Larry K

Für die interaktive Shell können Sie diesen einfachen Befehl verwenden:

ssh -J <user>@<hostB> <user>@<hostC>

Die Option -J steht für jump .

1
ssasa

YASS Noch eine einfache Lösung

ssh -f -L 2222:HostC_IP_or_Name:22 [email protected] sleep 10 &&
    ssh -o HostKeyAlias=HostC -p 2222 [email protected]
  • Öffnen Sie mit dem ersten Befehl eine ssh-Verbindung zu HostB und weisen Sie HostB an, Verbindungen weiterzuleiten von localhost: 2222 zu HostC: 22 .
  • der Parameter -f weist SSH an, nach dem Verbindungsaufbau in den Hintergrund zu wechseln
  • Zweiter Befehl öffnen Sie einfach eine Client-Verbindung zu localhost: 2222
  • Option HostKeyAlias ​​ sind nicht erforderlich, können jedoch dazu beitragen, die Verbindung zu einem falschen Host zu verhindern
  • Hinweis: Der Befehl sleep 10 wird benötigt, um die Verbindung aufrechtzuerhalten, bis der zweite Befehl ssh den weitergeleiteten Port verwendet. Dann wird der erste ssh geschlossen, wenn der zweite ssh den weitergeleiteten Port verlässt.

sie können jetzt nachfolgende ssh-Sitzungen ausführen:

ssh -o HostKeyAlias=HostC -p 2222 [email protected]

Variante:

ssh -f -L 2222:HostC_IP_or_Name:22 [email protected] sleep 10 &&
    ssh -M -S ~/.ssh/ssh_HostC22userOnC.sock -o HostKeyAlias=HostC -p 2222 [email protected]

nachfolgende SSH-Sitzungen können geöffnet werden, indem Sie Folgendes ausführen:

ssh -S ~/.ssh/ssh_HostC22userOnC.sock [email protected]

Der Hauptvorteil der Verwendung von -M- und -S-Parametern besteht darin, dass nur eine Verbindung von HostA zu HostC geöffnet ist, die nachfolgende Sitzung sich nicht erneut authentifiziert und viel schneller ausgeführt wird.

0
F. Hauri

Wenn Ihr Arbeitgeber ein VPN bereitstellt, würde ich empfehlen, dieses stattdessen zu verwenden.

Auf diese Weise müssen Sie keine Anwendungen speziell konfigurieren (auch nicht ssh), und Sie können jeden Computer hinter der Firewall sehen. Darüber hinaus wird der gesamte Datenverkehr von der VPN-Software verschlüsselt, wodurch der unbeabsichtigte oder absichtlich unverschlüsselte Datenverkehr sicherer wird.

0
Andrew Wagner

Sonderfall gemischte nix Plattformen:

HostA (Linux) -> HostB (Solaris) -> HostC (Linux)

Wenn Sie eine X-Anwendung auf hostC benötigen und der Zwischen-Hop auf der Solaris-Box ist ... in diesem Fall fand ich das auf dem ProxyCommand benötigte netcat (nc) folgendermaßen:

hostA: ~ $ vi .ssh/config:

 Host hostC 
 ProxyCommand ssh hostB nc% h% p # wobei nc netcat ist 

Dann funktioniert das automatische Tunneln:

hostA: ~ $ ssh hostC

0
nsysdcw