SSH-Tunnel erstellen funktioniert nicht mit Proxy

433
Peter

Ich habe über die Befehlszeile Zugriff auf einen Server mit SSH:

ssh my-server

mit dieser .ssh / config-Datei:

Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa  Host my-server HostName 1.2.3.4 User user ProxyJump some.proxy.com IdentityFile ~/.ssh/id_rsa 

Wenn ich jedoch einen Tunnel mit dem Server erstellen möchte, um über einen Browser darauf zuzugreifen, beispielsweise mit:

sudo ssh -L 80:my-server:80 my-server

Ich erhalte folgende Fehlermeldung:

ssh: Could not resolve hostname my-server: nodename nor servname provided, or not known 

Ich würde vermuten, dass die Verwendung von ssh auf diese Weise den in der .ssh/configDatei konfigurierten Proxy ignoriert . Ist das richtig oder fehlt mir etwas anderes? Kann ich noch etwas probieren?

0
Ich bin nicht sicher über die Details, aber ich glaube nicht, dass Servernamen in der `-L`-Option über die ~ .ssh / config-Datei aufgelöst werden. Was passiert, wenn Sie stattdessen sudo ssh -L 80: 127.0.01: 80 my-server verwenden? Gordon Davisson vor 5 Jahren 0
Vielen Dank für Ihren Kommentar, aber ich erhalte dieselbe Fehlermeldung. Hostname My-Server konnte nicht aufgelöst werden. Fehler. Peter vor 5 Jahren 0
Funktioniert es überhaupt ohne den Tunnel (`-L`-Teil)? Wenn nicht, würde ich einen merkwürdigen Unterschied in der Schreibweise des Hostnamens (wie einfacher ASCII-Strich vs. Phantasie-Unicode-Strich) oder seltsame Formatierung in der Konfigurationsdatei vermuten. Versuchen Sie, die Konfigurationsdatei mit `LC_ALL = C cat -vet ~ / .ssh / config` zu drucken, und sehen Sie, ob irgendetwas seltsam aussieht (abgesehen von dem" $ "am Ende jeder Zeile -` cat -e 'zeigt dies an wo die Linie endet Wenn die Zeilen ein "^ M" vor dem "$" haben, haben Sie eine DOS / Windows-formatierte Datei, und dies wird absolut zu Problemen führen. Gordon Davisson vor 5 Jahren 0
Es funktioniert nicht mit dem `-L`-Teil, aber die` .ssh / config'-Datei scheint in Ordnung zu sein (keine seltsamen Formatierungen oder DOS-Zeilenenden). Verwenden die `ssh -L ...'-Befehle standardmäßig sogar den` ProxyJump`-Eintrag in der `.ssh / config`-Datei? Peter vor 5 Jahren 0
Meines Wissens ist, dass `-L den Eintrag von 'ProxyJump` nicht beeinflussen sollte. Es sollte die SSH-Verbindung von Client -> some.proxy.com -> 1.2.3.4 hergestellt werden. Sobald die Verbindung hergestellt ist * und * eine Verbindung auf dem lokalen Port 80 empfangen wurde, müssen Sie das entfernte Ende (1.2.3.4) öffnen eine Verbindung zu meinem Server: 80. Die Auflösung von "my-server" in eine Adresse, zu der eine Verbindung hergestellt werden soll, erfolgt über eine normale Hostnamen-Suche auf dem Remote-Computer (1.2.3.4), wobei alle Konfigurationsdateien vollständig ignoriert werden. Gordon Davisson vor 5 Jahren 0
D'Oh, ich habe gerade das Problem erkannt. Wenn Sie `sudo ssh` verwenden, führt es` ssh` als Root aus und sucht / verwendet die ssh-Konfigurationsdatei des Root-Kontos, nicht Ihre. Es ist das "Sudo", nicht "-L", das das Problem verursacht. Versuchen Sie, dem Befehl `-F ~ / .ssh / config` hinzuzufügen, und prüfen Sie, ob dies behoben ist. (Hinweis: Ihre Shell löst den `~ /` - Teil in * Ihr * Home-Verzeichnis auf, bevor Sie `sudo` ausführen, daher wird Ihre Konfigurationsdatei anstelle von root verwendet.) Gordon Davisson vor 5 Jahren 0
Das macht Sinn. Ich werde es morgen versuchen, aber ich denke, das sollte funktionieren. Peter vor 5 Jahren 0

1 Antwort auf die Frage

0
Gordon Davisson

Nachdem ich einige rote Heringe in den Kommentaren gejagt hatte, bin ich ziemlich sicher, dass das eigentliche Problem weder mit ProxyJumpdem -LTunnel noch mit dem Tunnel zu tun hat . es ist wegen sudo. Beim Ausführen wird sudo sshder sshBefehl unter der Root-Benutzer-ID ausgeführt. Daher wird nach .ssh / config im Home-Verzeichnis des Root-Kontos und nicht in Ihrem gesucht. Und ~ root / .ssh / config hat keinen Eintrag für my-server(falls er überhaupt existiert).

Sie sollten in der Lage sein, dies zu beheben, indem Sie -F ~/.ssh/configdie sshOptionen hinzufügen, um zu sagen, dass Sie Ihre Konfigurationsdatei anstelle von root verwenden. Beachten Sie, dass der ~/Teil von der Shell erweitert wird, bevor er als Parameter an sudo(und dann ssh) übergeben wird. Die Shell erweitert sie also in Ihr Home-Verzeichnis und nicht in das Stammverzeichnis.

Ich habe dies jedoch nicht getestet, aber ich denke, dass die IdentityFile ~/.ssh/id_rsaEinträge in Ihrer Konfigurationsdatei kaputt gehen werden, da sie in das ~ / .ssh-Verzeichnis des Stammverzeichnisses aufgelöst werden. Möglicherweise müssen Sie den expliziten Pfad zu Ihrem Home-Verzeichnis anstelle der ~Verknüpfung angeben. Eine weitere Möglichkeit wäre das Hinzufügen -i ~/.ssh/id_rsain die Befehlszeile, damit sie erneut von der Shell erweitert wird, die als Sie ausgeführt wird.

Außerdem erhalten Sie wahrscheinlich Warnungen über unbekannte Hosts usw., da Sie die ~ / .ssh / known_hosts -Datei von root verwenden.