it-swarm.com.de

SSH: Fehlerbehebung bei "Remote-Portweiterleitung für Listen-Port fehlgeschlagen"

Frage: Warum führt ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> zum Fehler "Remote-Portweiterleitung für Listen-Port fehlgeschlagen"? Ziel ist es, einen Reverse-Tunnel mit Port-Forwarding einzurichten, um konsistent in einen Host hinter einem NAT -Router mit einer dynamischen privaten IP-Adresse zu sshen. Siehe Bild für Details.

Bereits ausprobiert:

  1. Recherchierte vorhandene Literatur zu Google, Stackoverflow usw. Es gibt Themen zu dieser Fehlermeldung, jedoch unterscheiden sich die angegebenen Lösungsursachen von denen dieser bestimmten Instanz, da diese Lösungen den Fehler in diesem Fall nicht beheben.
  2. Ich habe mehrere Diagnosen durchgeführt, um zu überprüfen, ob die erforderlichen Ports geöffnet sind. Einige dieser Ergebnisse sind in der folgenden Abbildung dargestellt.

Reverse-SSH-Tunnel

Image 1

Update

Ich habe den folgenden Befehl für Schritt 2 ausprobiert: [email protected]:~ ssh [email protected] -p 2222

Es sollte sein: [email protected]:~ ssh [email protected] -p 2222 Sie möchten die greenuser-Anmeldeinformationen auf der bluehost-IP verwenden, da der Host, bei dem Sie sich anmelden, wenn Sie Port 2222 verwenden, wirklich der greenhost ist.

7
ngm_code

Warum führt ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> zum Fehler "Remote-Port-Weiterleitung für Listen-Port fehlgeschlagen"?

Ich erhalte genau diese Warnung, wenn ich versuche, einen Port zu verwenden, der bereits auf der Remote-Seite belegt ist.

Die Ausgabe von netstat von bluehost zeigt an, dass dort bereits etwas auf Port 2222 lauscht. Es zeigt jedoch nicht, was es ist.

Lösungen:

  1. Ändern Sie 2222 in Ihrem Aufruf von ssh in einen anderen Port, der für bluehost nicht verwendet wird. Machen Sie es einfach größer als 1023, da normale Benutzer keine Bindung zu bekannten Ports herstellen können. Andernfalls erhalten Sie die gleiche Warnung, unabhängig davon, ob der Port verwendet wird oder nicht.
  2. Oder identifizieren Sie den Abhörprozess (bei bluehost) mit Sudo lsof -i TCP:2222; Beenden oder konfigurieren Sie es neu, um den Port 2222 verfügbar zu machen.

Bearbeiten:

In Ihrem Fall scheint dieser Teil von man ssh wichtig zu sein:

-R [bind_address:]port:Host:hostport
-R [bind_address:]port:local_socket
-R remote_socket:Host:hostport
-R remote_socket:local_socket

[…] Standardmäßig sind TCP Listening-Sockets auf dem Server nur an die Loopback-Schnittstelle gebunden. Dies kann durch Angabe eines bind_address außer Kraft gesetzt werden. Ein leerer bind_address oder die Adresse "*" gibt an, dass der Remote-Socket alle Schnittstellen überwachen soll. Die Angabe eines Remote-bind_address ist nur dann erfolgreich, wenn die Option GatewayPorts des Servers aktiviert ist (siehe sshd_config(5)).

Dies bedeutet, dass Sie GatewayPorts yes in sshd_config für bluehost haben sollten. Lesen Sie man 5 sshd_config, um mehr zu erfahren. Vergessen Sie nicht, den Dienst danach neu zu laden.

13

Stellen Sie sicher, dass an Port 2222 von bluehost keine hängende Verbindung besteht. Testen Sie bei bluehost lsof -t -i:2222, ob eine Prozess-ID Port 2222 verwendet. Beenden Sie diesen Prozess zusätzlich (z. B. mit kill $(lsof -t -i:2222)).

Dies löste das Problem für mich. Hoffentlich sind diese Informationen für jemand anderen nützlich. :)

4
jervtub