Sicherer Tunnel-Port durch den Zwischen-Host

23

Ich möchte einen Port für VNC zurück zu meinem Haus bringen. Ich muss über einen einzelnen Host springen, um dann zu meiner eigentlichen Arbeitsmaschine zu springen.

  • sittinghere wird meine lokale Heimmaschine sein
  • hopper werde durch das zwischenhüpfen das ich machen muss
  • overthere wird die Fernarbeitsmaschine sein

Ich kann dies mit SSH in meine Arbeitsmaschine tun:

ssh -t hopper "ssh -t overthere"

Ich möchte die Portweiterleitung verwenden, um den Remote-Port 5900 an overthereden lokalen Port 5900 weiterzuleiten sittinghere. Ich würde es jedoch vorziehen, dies zu tun, ohne offen an einen Port gebunden zu sein, hopperda jeder auf diesem Computer in der Lage wäre, eine Verbindung zu meiner VNC-Verbindung herzustellen.

Kann ich diesen Port sicher an meinen lokalen Computer weiterleiten, ohne dass jemand darauf zugreifen kann hopper?

Naftuli Kay
quelle
Welchen VNC-Client verwenden Sie?
SLM

Antworten:

18

Verwendung der nativen Fähigkeit von SSH, Ports weiterzuleiten. Von sittinghereausführen:

 ssh -v -N -L 5900:overthere:5900 user@hopper

Richten Sie Ihren VNC-Client auf localhost:5900und der Datenverkehr wird overthere:5900über die auf eingerichtete SSH-Verbindung weitergeleitethopper

Bach
quelle
1
AFAIK, diese Lösung hilft Ihnen nicht weiter, wenn 5900 nur an die lokale Schnittstelle (127.0.0.1) gebunden ist, wie dies beim Tunnel der Fall ist hopper, und dann den hoppergesamten Datenverkehr an weiterleitet overthere:5900. Wenn Sie overthere:5900auf 0.0.0.0der angegebenen Schnittstelle lauschen , funktioniert dies, aber nicht, wenn Sie auf der angegebenen Schnittstelle lauschen 127.0.0.1.
Naftuli Kay
18

Ich habe einige SSH- ~/.ssh/configHacks verwendet, um dies zu ermöglichen:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

Was dies bedeutet ist , dass , wenn ich versuchen , eine Verbindung ssh overthereaus sittinghere, es verbindet sich hopperdann als Proxy die SSH - Verbindung zum Port 22 auf overthere(dh: SSH auf overthere).

Dies hat einige tolle Nebenwirkungen:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

Alles funktioniert super und soweit ich das beurteilen kann, wird 5900 nicht geöffnet hopper, sondern nur direkt von overtherean weitergeleitet sittinghere.

Naftuli Kay
quelle
Übrigens hätte ich das in den Kommentaren vorher fragen sollen, aber die Lösung, auf die Sie gestoßen sind, ist direkt aus der x11nvc-Manpage 8-). Entschuldigung, ich habe nicht daran gedacht zu fragen, welchen VNC-Server Sie verwendet haben.
SLM
Das macht mir Angst, aber es funktioniert definitiv!
Dale Anderson
1
In einigen Linux-Distributionen (zB Ubuntu 14.04) ist netcat-openbsd standardmäßig installiert. In diesem Fall funktioniert dieser Hack möglicherweise nicht. Um dieses Problem zu beheben, sollten Sie zuerst netcat-traditional package ( apt-get install netcat-traditional -y) installieren . Dann sollten Sie den ncTyp explizit in der Konfigurationsdatei angeben (durch Ersetzen ncdurch nc.traditional).
VeLKerr
@Naftuli: In der Tat großartig!
gegangen
1
@ Alexander Pozdneev netcat .
Taylorthurlow
1

Sie können einen Port vom SSH-Port sittingherezum overthereSSH-Port weiterleiten hopper. Dann können Sie diesen Port verwenden, um overtheredirekt von zu erreichen sittinghere. In dieser zweiten SSH-Sitzung können Sie VNC oder beliebige andere Ports weiterleiten, während hoppernur eine verschlüsselte SSH-Sitzung angezeigt wird.

Erste SSH-Sitzung:

ssh -f -N -L 7022:overthere:22 hopper

Teilen Sie dem SSH-Client nun mit, wie er erreichen kann, overthereindem Sie diese Konfiguration zu ~/.ssh/configon hinzufügensittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Zweite SSH-Sitzung:

ssh -f -N -L 5900:localhost:5900 overthere

Oder einfach eine regelmäßige interaktive SSH-Sitzung ohne den VNC-Porttunnel:

ssh overthere

Wenn Sie sich nicht die Mühe machen möchten, Zeilen hinzuzufügen, können ~/.ssh/configSie ihm dennoch overthereüber die Befehlszeile mitteilen, wie eine Verbindung hergestellt werden soll:

ssh -p 7022 hopper

... aber ohne HostKeyAliasSSH wird der overthereFingerabdruck des Schlüssels nicht korrekt überprüft .

Alle Befehlszeilen müssen von ausgeführt werden sittinghere.

Übrigens, ich glaube , Sie wahrscheinlich nicht brauchen , werden mit ssh‚s - -tOption.

Celada
quelle
1

Schließen Sie zuerst den Trichter an, während Sie einen Tunnel zwischen dem Arbeiter und dem Heim-PC herstellen.

ssh -f ismail@hopper -L 2222:overthere:22 -N

dann mach ssh ro mit vnc tunnel drüber

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

Jetzt können Sie sich mit vnc verbinden. Übrigens ändern Sie die Konfiguration von vnc, um localhost zu hören

ibaydan
quelle
0

Wenn Sie den VNC-Client vncviewerüber die Befehlszeile verwenden, können Sie ihn mit dem -viaSwitch anweisen, vor dem Herstellen einer user@hostVerbindung mit dem VNC-Server eines anderen Hosts einen Tunnel zu durchlaufen .

Beispiel

$ vncviewer -via user@host localhost:0

Sie können auch verwenden vinagre, um eine Verbindung über einen SSH-Tunnel über die GUI herzustellen. Stellen Sie dazu Ihre Verbindung analog über den Verbindungsdialog in vinagre:

              ss # 1

Dies führt dazu, dass Ihre Verbindung hergestellt und über den SSH-Tunnelhost getunnelt wird.

    ss # 2

Verweise

slm
quelle
0

Der folgende Befehl sollte auch einwandfrei funktionieren

ssh -f -N -J hopper overthere -L 5900:localhost:5900

Es wurde mit zusätzlichen Parametern getestet, um den PostgreSQL-Server postgres-serveran einem benutzerdefinierten Port ( -pSwitch) und unter Verwendung eines benutzerdefinierten Benutzernamens zu verbinden.

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

Wie Sie sehen, ist diese Lösung einfach und erfordert keine Konfigurationsänderungen von ssh oder Zwischenschritte.

SimonB
quelle