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 SieProxyJump
das alles wie von Zauberhand zusammenbackt:
ssh -J windows_machine remote_server
Was bei Ihnen ~/.ssh/config
so aussieht:
Host remote_server
HostName remote_server
ProxyJump windows_machine
User myname
ProxyJump
unterstützt die vollständige SSH-Syntax. Wenn Sie also jim
online sind und der Port für SSH windows_server
verwendet wird . Die IP-Adresse liegt bei „“ dann können Sie Folgendes schreiben:2222
remote_server
192.168.0.110
windows_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_server
Sie sich jetzt auf dem befinden, windows_machine
sicherstellen 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/config
Datei 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_machine
kö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.