Führen Sie X-Clients über einen Multi-Hop-SSH-Tunnel aus

7

Ich habe kürzlich meine Heimentwicklungsmaschine auf Linux umgestellt und möchte mich bei Bedarf von der Arbeit aus bei ihr anmelden können. Ich verwende eine Mischung aus Linux- und Windows-Computern und habe bereits verschiedene Drehungen von ssh / putty / Xorg / Cygwin / etc eingerichtet, um X-Clients remote zu starten und auf dem lokalen X-Server anzuzeigen.

Mein Problem ist, dass sich meine Heimcomputer hinter einer Firewall befinden. Um zu ihnen zu gelangen, muss über ssh durch die Firewall getunnelt werden. Als ich Windows ausführte, hatte ich die SSH-Portweiterleitung in der Firewall eingerichtet, um RDC-Verbindungen auf den richtigen Computer zu übertragen, aber es scheint, dass das X-Tunneling komplexer ist. Das Aktivieren der X11-Weiterleitung über die SSH-Verbindung zur Firewall scheint nur für X-Clients zu funktionieren, die auf diesem Computer ausgeführt werden, nicht für Clients, die ich beim zweiten "Hop" starte.

Gibt es eine Möglichkeit, die X11-Verbindung über die Firewall und zu einem Remote-Computer weiterzuleiten / zu tunneln / was auch immer, der einen zusätzlichen Sprung entfernt ist?

Randnotiz:

Ich bin nicht besonders mit X11 verheiratet. Wenn es also eine andere Option gibt, die über mehrere SSH-Hops besser funktioniert, würde ich das als Antwort nehmen (insbesondere, wenn Sie mir sagen können, warum es besser ist). Ich habe zufällig bereits einen Xorg-ish-Server auf allen meinen Arbeitsmaschinen. Die Anforderungen sind grundsätzlich:

  • Display-Side-Thingee (X-Server, RDC-Client usw.) muss unter Linux und Windows ausgeführt werden
  • Anwendungsseitiges Material muss nur unter Linux ausgeführt werden
  • Muss über einen SSH- "Tunnel" von mindestens 2 zwei Sprüngen arbeiten.
KutuluMike
quelle

Antworten:

10

Nehmen wir an, Sie haben die folgende Topologie:

Arbeit -> Firewall (Portweiterleitung) -> Server -> Ziel.

Wenn Ihr Problem darin besteht, dass Sie den X11 nicht einschalten, Targetweil Sie dies tun, ssh -X Serverund dann in Ihrem Inneren Server, ssh -X Targetfunktioniert dies möglicherweise für Sie.

sshErmöglicht das Weiterleiten von Ports. Sie können eine sshVerbindung verwenden, um einen Remote-Port einem lokalen Port zuzuordnen. Zum Beispiel kann man auf Folgendes zugreifen Target:

Ordnen Sie den Port 22über die Verbindung Targeteinem lokalen Port zu (lassen Sie diese Verbindung offen oder verwenden Sie die Option -Nf).20000Server

ssh -L20000:Target:22 Server

Stellen Sie dann eine Verbindung Targetüber diesen zugeordneten Port her.

ssh -p 20000 -X localhost

Tinti
quelle
Um sicherzugehen, dass ich das verstehe, wird ein SSH-Tunnel direkt zum Zielcomputer eingerichtet, sodass er für X nur wie ein Sprung aussieht. Das klingt so, als ob es funktionieren sollte, ich werde es dich wissen lassen ...
KutuluMike
Ja. Genau. Sie nehmen einen Remote-Port, der einen Server als Bridge verwendet, und ordnen ihn einem lokalen Port zu. Mit SSH können Sie solche Dinge mit -L (remote zu lokal), -R (lokal ro remote) und -D (eine Art Proxy erstellen) ausführen.
Tinti
Dies ist eine nützliche Technik und oft die beste Option. Beachten Sie jedoch die Leistungsprobleme beim Ausführen von TCP über TCP, wenn Sie einen Paketverlust haben.
mc0e
Die Verbindung zwischen Ziel und Server ist hier sicher oder nicht? Soweit ich weiß, könnte dies ein Problem sein?
Syrtis Major
1
@SyrtisMajor so sicher wie eine sshVerbindung, da die Daten per sshProtokoll transportiert werden .
Tinti