Wie ssh ich auf einen Server, den ich nicht direkt erreichen kann?

17

Kontext

Ich verwende Ubuntu Desktop als meine primäre Maschine, die ich D nennen werde. Ich möchte über ssh eine Verbindung zum Server S herstellen, aber die Firewall blockiert mich.

Ich habe Zugriff auf Server S über einen sehr umständlichen Pfad, der eine virtuelle Windows-Maschine und PuTTY umfasst . Das macht die Arbeit mit diesem Server extrem ärgerlich: Eine völlig andere Umgebung, Kopieren / Einfügen funktioniert nicht, ich kann meinen Desktop nicht richtig verwenden, während ich mit ihm verbunden bin (Alt-Tab wird von der virtuellen Maschine unterbrochen) usw

Ich habe überprüft, ob ich vom Server S auf meinen Desktop-Computer D ssh kann (im Gegensatz zu dem, was ich benötige).

Könnte ich irgendwie eine "Portweiterleitung" oder ähnliches vom Server aus initiieren, damit ich von meinem Desktop aus ssh zum Server senden kann?

dangonfast
quelle
2
Spring zu den Gastgebern ... ich muss sie lieben !!!
RonJohn
Mögliches Duplikat von Tunnel-SSH von A-> B-> C
muru
@muru das ist ein anderes szenario, aber natürlich verwandt (es geht doch um tunneling!). In diesem Fall möchte ich einen D->SMissbrauch vortäuschenS->D
dangonfast

Antworten:

32

Mit dem folgenden Befehl können Sie einen SSH-Tunnel vom Remote-Server zu Ihrem lokalen Computer einrichten:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Wenn der Tunnel eingerichtet ist, können Sie einfach mit dem folgenden Befehl ssh an Ihren Remote-Server senden:

$ ssh -p 1234 user@localhost

Bitte beachten Sie, dass Sie ssh-Schlüssel für die automatische Anmeldung einrichten müssen (keine Passwortabfrage). Wenn Sie den SSH-Tunnel interaktiv erstellen möchten, können Sie die Optionen entfernen -f -N. Für weitere Informationen man ssh.

Khaled
quelle
Wie führt dieser Tunnel durch die Windows-VM? (Wo ich arbeite, gibt es mehrere Schichten von Firewalls und nur wenige Ports sind geöffnet.)
RonJohn
@RonJohn Ich glaube, dies nutzt die Tatsache, dass (für OP) sshing vom Server zum Desktop funktioniert, so dass ein Tunnel vom Server (Port 22) direkt zum Desktop-Computer (Port 1234) aufgebaut wird, der verwendet werden kann Verbindung zu ssh auf dem Server (der Port 22 verwendet). Die Windows-VM wird nur zum Einrichten des Tunnels verwendet. (Bitte korrigieren Sie mich, wenn ich falsch
liege
@dangonfast Zusätzlich zu der Antwort finden Sie möglicherweise das folgende Wertdokument
Pryftan
@RonJohn Das Dokument, mit dem ich gerade verlinkt habe, könnte auch bei der Beantwortung dieser Frage hilfreich sein, zumindest was mehrere Schichten von Firewalls usw. angeht erinnerte mich an den Link von vor Jahren).
Pryftan
1
@ pizzapants184 in der Tat, das war mein Ausgangspunkt: ssh von S -> D, also möchte ich dies missbrauchen, um effektiv D -> S zu tun, obwohl das nicht direkt funktioniert. Warum das Netzwerk so konfiguriert ist, ist mir ein Rätsel. Es könnte beabsichtigt oder eine Fehlkonfiguration sein, aber solange es für mich funktioniert ...
dangonfast
5

Wenn Sie eine neuere Version von OpenSSH (7.3+) verwenden, können Sie verwenden, ProxyJumpwas alles auf magische Weise zusammenbrennt:

ssh -J windows_machine remote_server

Welches in Ihrem ~/.ssh/configAussehen wie:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpunterstützt die volle SSH - Syntax, wenn Sie also jimauf , windows_serverund es verwendet Port 2222für ssh. remote_serverist bei IP 192.168.0.110ab dem windows_serverdann kannst du schreiben:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

Und immer noch einfach laufen ssh remote_server, um dorthin zu gelangen.


Wenn Sie eine ältere Version von SSH ausführen , verwenden Sie ProxyCommand. Auf diese Weise können Sie SSH anweisen , zuerst einen Befehl zum Herstellen einer Proxy-Verbindung auszuführen, bevor Sie den eigentlichen SSH-Befehl ausführen.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Dies verwendet die SSH- W- Option, die für die geheimnisvollere Netcat-Syntax eine Abkürzung ist .

Beachten Sie, dass, wie beim Laufen ssh remote_serverSie sind jetzt auf die windows_machineSie benötigen , um sicherzustellen , dass Sie die IP - Adresse der Verwendung remove_server aus dem Sprung Feld anstatt die IP von Ihrem Computer - diese gut die gleiche sein kann.

Sie können dann diese Anweisung zu Ihrer ~/.ssh/configDatei hinzufügen :

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Das bedeutet, wenn remote_server es sich um eine andere Maschine handelt windows_machine, können Sie diese in die Konfiguration einfügen und trotzdem nur verwenden ssh remote_server.

Boris die Spinne
quelle
1
Das ist eine viel bessere Antwort.
Robert Riedl
Dies ist zwar nützlich, beantwortet aber nicht die gestellte Frage. OP gibt an, dass sie nicht von D-> S SSH können (was sie wollen), aber sie können von S-> D SSH. Dazwischen gibt es keine ssh-Proxys (stattdessen gibt es die virtuelle Windows-Maschine, auf die wahrscheinlich über RDP zugegriffen wird).
mbrig
@mbrig in der Tat. Ich habe diese Lösung noch nicht ausprobiert, würde mich aber wundern, wenn sie funktioniert: Ich bin von D -> S
dangonfast
Aber Sie sagen, Sie können zur Windows-Maschine gelangen - von da an habe ich verstanden, dass sie als Sprungbrett zwischen Ihnen und der anderen Maschine fungieren kann.
Boris die Spinne
1
Ich kann mich mit einem proprietären Tool (VMWare Horizon) bei der Windows-Maschine anmelden. Ich habe nie gesagt, dass ich es tun kann. Ich habe dies sogar getestet, bevor ich diese Frage gestellt habe, indem ich den Putty-Companion-SSH-Server installiert habe (ich habe den Namen vergessen), aber meine Tests sind fehlgeschlagen. Ich gehe davon aus, dass ssh auch für das Windows-Subnetz firewalled ist.
Dienstag,
1

Können Sie nicht einfach darum bitten, dass SSH von Ihrem Desktop zum Server zugelassen wird, anstatt zu versuchen, Dinge zu umgehen und einen verschlungenen Pfad zu erstellen? Wenn Sie die Notwendigkeit dafür haben und auf den Server zugreifen sollten, kann ich nicht verstehen, warum die Anfrage abgelehnt wurde.

Sonneneruption
quelle
Möchtest du die Ablehnung erklären? Die Frage ist "Wie ssh ich auf einen Server, den ich nicht direkt erreichen kann?" Daher ist meine Antwort auf die Einführung einer Firewall-Regel gültig. Dies ist auch der richtige Weg, um es gemäß der guten Sicherheitspraxis zu umgehen.
Sonneneruption
Ich bin in meiner ersten Woche eines Dreimonatsvertrages eines großen Firmenkunden. Ich habe keinen Laptop bekommen (ich benutze meinen) und kaum einen Schreibtisch. Ich habe Dutzende von Anmeldeinformationen erhalten, um die verschiedenen Dienste zu nutzen, und es gelingt mir kaum, das Ganze unter einen Hut zu bringen. Was ich tun möchte, ist keine harte Anforderung, um meine Arbeit auszuführen: Ich kann in der VM arbeiten, und das wird mir mein Chef sagen, wenn ich anfange, lustige Fragen zu stellen. Oder er verweist mich auf den Helpdesk, der in den nächsten Wochen / Monaten für Aufsehen sorgt.
Dangonfast
Wenn ich in der VM arbeite, bedeutet dies leicht einen Produktivitätsverlust von 50%. Daher möchte ich dies so weit wie möglich vermeiden. Trotzdem liebe ich diesen Gig!
Dangonfast
1
Ich kann das verstehen. Meiner Erfahrung nach sind große Unternehmenskunden ziemlich verärgert, wenn Bauunternehmer Firewalls und Richtlinien umgehen, um ihre Arbeit zu erledigen, auch wenn dies aus altruistischen Gründen geschieht. Die Tatsache, dass Sie SSH vom Server auf Ihren Desktop übertragen können, sagt mir, dass entweder Sie nicht in der Lage sind, das Gegenteil zu tun, ein Versehen ist oder etwas, das für einen bestimmten Zweck eingerichtet wurde.
Sonneneruption
4
Dies ist die einzig wahre Lösung, wenn Sie vermeiden möchten, dass Sie wegen Umgehung von Richtlinien gefeuert werden. Sprechen Sie zumindest mit den Verantwortlichen, bevor Sie die Khaleds-Lösung verwenden, damit diese wissen, was Sie vorhaben.
Sven