web-dev-qa-db-fra.com

SSH: Dépannage des erreurs «Echec de la redirection de port distant pour le port d'écoute»

Question: Pourquoi ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> entraîne-t-il l'erreur "Echec de la redirection de port distant pour le port d'écoute"? L'objectif est d'établir un tunnel inverse avec une redirection de port afin de ssh de manière cohérente dans un hôte derrière un routeur NAT avec une adresse IP privée dynamique. Voir l'image pour plus de détails.

déjà essayé:

  1. Recherche dans la littérature existante sur Google, Stackoverflow, etc. Il existe des rubriques concernant ce message d'erreur, mais les résolutions indiquées résolvent des causes fondamentales différentes de celles de cette instance particulière car ces résolutions ne résolvent pas l'erreur dans ce cas.
  2. J'ai effectué plusieurs diagnostics pour valider que les ports requis sont ouverts. Certains de ces résultats sont présentés dans l'image ci-dessous.

Reverse SSH Tunnel

Image 1

Mettre à jour

J'essayais la commande suivante pour l'étape 2: reduser@redhost:~ ssh greenuser@greenhost -p 2222

Ce devrait être: reduser@redhost:~ ssh greenuser@bluehost -p 2222 Vous voulez utiliser les informations d'identification greenuser sur l'IP bluehost car l'hôte auquel vous vous connectez lorsque vous utilisez le port 2222 est vraiment le greenhost.

7
ngm_code

Pourquoi ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> entraîne-t-il l'erreur "Echec de la redirection de port distant pour le port d'écoute"?

Je reçois cet avertissement lorsque j'essaie d'utiliser un port déjà utilisé du côté distant.

La sortie de netstat à partir de bluehost indique que quelque chose écoute déjà sur le port 2222. Cela ne montre pas ce que c'est cependant.

Solutions:

  1. Remplacez 2222 dans votre invocation ssh par un autre port non utilisé sur bluehost. Assurez-vous simplement qu'il soit supérieur à 1023 car les utilisateurs normaux ne peuvent pas se connecter à ports connus; sinon, vous recevrez le même avertissement, que le port soit utilisé ou non.
  2. Ou identifiez le processus d'écoute (sur bluehost) avec Sudo lsof -i TCP:2222; terminez ou reconfigurez-le pour rendre le port 2222 disponible.

Modifier:

Dans votre cas, cette partie de man ssh semble importante:

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

[…] Par défaut, TCP sockets à l'écoute sur le serveur seront uniquement liés à l'interface de bouclage. Cela peut être annulé en spécifiant un bind_address. Un bind_address ou l'adresse "*" vide indique que le socket distant doit écouter toutes les interfaces. La spécification d'un bind_address à distance ne réussira que si l'option GatewayPorts du serveur est activée (voir sshd_config(5)).

Cela signifie que vous devriez avoir GatewayPorts yes dans le sshd_config sur bluehost. Lisez man 5 sshd_config pour en savoir plus. N'oubliez pas de recharger le service après.

13

Assurez-vous qu'il n'y a pas de connexion suspendue sur le port 2222 de bluehost. Testez sur bluehost lsof -t -i:2222 si un identifiant de processus utilise le port 2222. En outre, supprimez ce processus (par exemple, avec kill $(lsof -t -i:2222)).

Cela a résolu le problème pour moi. Espérons que cette information est utile pour quelqu'un d'autre. :)

4
jervtub