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?
Antworten:
.ssh/config
Fügen Sie dies in Ihre Datei auf hostA ein (siehe man 5 ssh_config für Details):Jetzt wird der folgende Befehl automatisch durch hostB getunnelt
Möglicherweise möchten Sie Optionen wie
-oCiphers=arcfour
und hinzufügen, um die Verarbeitung-oClearAllForwardings=yes
zu beschleunigen, da das Einschließen vonssh
Inhaltenssh
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
-W
Option nicht verfügbar. In diesem Fall können Sie das Obige mit netcat (nc
) implementieren :quelle
-W
Option sollte anstelle dernc
Option verwendet werden.-W
nur das auf hostA (dem Ursprung) oder auch das auf hostB (dem mittleren Rechner) unterstützen?hostB
, können Sie darüber mehrereHost hostC
Zeilen deklarieren,ProxyCommand
um den Zugriff auf mehrere Hosts über den mittleren Server zu vereinfachen.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:
Das bringt dir eine Muschel auf
machineb
. Lass das in Ruhe; minimieren Sie das Terminalfenster.Nun, wenn Sie eine SSH - Verbindung zu machen
localhost
, werden Sie tatsächlich zu verbindenmachinec
durchmachineb
. 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.
quelle
-p 8022
Sie einfach Ihre ssh-Befehle. Und mit git ist es denkbar einfach: Verwenden Sie die URIssh://localhost:8022/path/to/repo.git
.Klingt so, als ob Sie einen Shell-Alias auf A haben möchten, der dazu führt, dass ssh auf C auftritt
quelle
-t
um die äußere ssh Optionen , wenn Sie eine interaktive Shell wollen, dassh
davon ausgegangen ,-T
wenn es einen Befehl gegeben hat.Für die interaktive Shell können Sie diesen einfachen Befehl verwenden:
Die Option -J ist für den Sprung .
quelle
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 versehentlich oder absichtlich unverschlüsselter Datenverkehr sicherer wird.
quelle
YASS Noch eine einfache Lösung
-f
Parameter weist SSH an, nach dem Verbindungsaufbau in den Hintergrund zu wechselnsleep 10
wird benötigt, um die Verbindung aufrechtzuerhalten, bis der zweite Befehl ssh den weitergeleiteten Port verwendet. Dann wird die erste SSH geschlossen, wenn die zweite SSH den weitergeleiteten Port verlässt.Sie können jetzt nachfolgende ssh-Sitzungen ausführen:
Variante:
Nachfolgende SSH-Sitzungen können geöffnet werden, indem Sie Folgendes ausführen:
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.
quelle
Sonderfall gemischte nix Plattformen:
HostA (Linux) -> HostB (Solaris) -> HostC (Linux)
Benötigen Sie eine X-Anwendung auf HostC und der Zwischen-Hop ist auf Solaris-Box ... In diesem Fall fand ich das Netcat (nc), das auf dem ProxyCommand benötigt wird, folgendermaßen:
hostA: ~ $ vi .ssh / config:
Dann funktioniert das automatische Tunneln:
hostA: ~ $ ssh hostC
quelle