Wie stelle ich eine SSH-Verbindung zu einem Server her, den ich nicht direkt erreichen kann?

Wie stelle ich eine SSH-Verbindung zu einem Server her, den ich nicht direkt erreichen kann?

Kontext

Auf meinem primären Computer verwende ich Ubuntu Desktop, den ich D nennen werde. Ich möchte per SSH eine Verbindung zum Server S herstellen, aber die Firewall blockiert die Verbindung.

Ich habe Zugriff auf Server S, und zwar über einen sehr umständlichen Weg, der eine virtuelle Windows-Maschine einschließt, undKitt. Das macht die Arbeit mit diesem Server extrem nervig: völlig andere Umgebung, Kopieren/Einfügen funktioniert nicht, ich kann meinen Desktop nicht richtig verwenden, während ich damit verbunden bin (Alt-Tab wird von der virtuellen Maschine kaputt gemacht) usw.

Ich habe überprüft, dass ich vom Server S eine SSH-Verbindung zu meinem Desktop-Computer D herstellen kann (das Gegenteil von dem, was ich brauche).

Könnte ich irgendwie eine „Portweiterleitung“ oder ähnliches vom Server aus initiieren, sodass ich von meinem Desktop aus per SSH auf den Server zugreifen kann?

Antwort1

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 mit dem folgenden Befehl einfach eine SSH-Verbindung zu Ihrem Remote-Server herstellen:

$ ssh -p 1234 user@localhost

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

Antwort2

Wenn Sie eine neuere Version von OpenSSH (7.3+) verwenden, können SieProxyJumpdas alles wie von Zauberhand zusammenbackt:

ssh -J windows_machine remote_server

Was bei Ihnen ~/.ssh/configso aussieht:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpunterstützt die vollständige SSH-Syntax. Wenn Sie also jimonline sind und der Port für SSH windows_serververwendet wird . Die IP-Adresse liegt bei „“ dann können Sie Folgendes schreiben:2222remote_server192.168.0.110windows_server

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

UndTrotzdemlauf einfach ssh remote_server, um dorthin zu gelangen.


Wenn Sie eine ältere Version von SSH verwenden, verwenden SieProxy-Befehl- hiermit können Sie SSH anweisen, zuerst einen Befehl zum Herstellen einer Proxy-Verbindung auszuführen, bevor der eigentliche SSH-Befehl ausgeführt wird.

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

Dies verwendet die SSH-WOption, die eine Abkürzung für die geheimnisvollereNetcat-Syntax.

Beachten Sie, dass Sie beim Ausführen, wenn ssh remote_serverSie sich jetzt auf dem befinden, windows_machinesicherstellen müssen, dass Sie die IP desremove_server aus der Sprungboxund nicht die IP Ihres Computers. Diese können durchaus identisch sein.

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, dass wennremote_server Istvon einer anderen Maschine aus gesehen, windows_machinekönnen Sie das in die Konfiguration einfügen und trotzdem einfach verwenden ssh remote_server.

Antwort3

Anstatt zu versuchen, Dinge zu umgehen und einen verschlungenen Pfad zu erstellen, können Sie nicht einfach darum bitten, dass SSH von Ihrem Desktop zum Server zugelassen wird? Wenn Sie es brauchen und auf den Server zugreifen sollten, sehe ich keinen Grund, warum die Anfrage abgelehnt werden sollte.

verwandte Informationen