SSH: Troubleshooting de erros “Remote port forwarding failed for listen port”

4

Pergunta: Por que ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> resulta em um erro "Falha no encaminhamento de porta remota para porta de escuta"? O objetivo é estabelecer um túnel reverso com encaminhamento de porta para consistentemente ssh em um host atrás de um roteador NAT que tenha um IP privado dinâmico. Veja a imagem para detalhes.

Já tentei:

  1. Pesquisamos a literatura existente no Google, Stackoverflow, etc. Há tópicos relacionados a essa mensagem de erro, mas as resoluções fornecidas resolvem as causas-raiz diferentes da instância específica, porque essas resoluções não resolvem o erro nesse caso.
  2. Eu realizei vários diagnósticos para validar se as portas necessárias estão abertas. Alguns desses resultados são mostrados na imagem abaixo.

Túnel SSH reverso

Atualizar

Eu estava tentando o seguinte comando para a Etapa 2: reduser@redhost:~ ssh greenuser@greenhost -p 2222

Deve ser: %código% Você deseja usar as credenciais de usuário verde no IP bluehost porque o host no qual você está efetuando quando usa a porta 2222 é realmente o host verde.

    
por ngm_code 31.03.2017 / 04:36

2 respostas

9

Why does ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> result in a "Remote port forwarding failed for listen port" error?

Eu recebo este aviso exato quando tento usar uma porta que já está sendo tomada no lado remoto.

A saída de netstat de bluehost indica que algo já está escutando na porta 2222 . Não mostra o que é isso.

Soluções:

  1. Altere 2222 na sua invocação de ssh para outra porta que não esteja em uso em bluehost . Basta torná-lo maior que 1023 porque os usuários comuns não podem se vincular a portas conhecidas ; caso contrário, você receberá o mesmo aviso, independentemente de a porta estar em uso ou não.
  2. Ou identifique o processo de escuta (em bluehost ) com sudo lsof -i TCP:2222 ; terminar ou reconfigurá-lo para tornar a porta 2222 disponível.

Editar:

No seu caso, essa parte de man ssh parece importante:

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

[…] By default, TCP listening sockets on the server will be bound to the loopback interface only. This may be overridden by specifying a bind_address. An empty bind_address, or the address ‘*’, indicates that the remote socket should listen on all interfaces. Specifying a remote bind_address will only succeed if the server's GatewayPorts option is enabled (see sshd_config(5)).

Isso significa que você deve ter GatewayPorts yes no sshd_config on bluehost . Leia man 5 sshd_config para saber mais. Não esqueça de recarregar o serviço depois.

    
por 02.04.2017 / 23:50
2

Verifique se não há conexão pendente na porta 2222 no bluehost. Teste em bluehost lsof -t -i:2222 se qualquer ID de processo estiver usando a porta 2222. Além disso, mate esse processo (por exemplo, com kill $(lsof -t -i:2222) ).

Isso resolveu o problema para mim. Espero que esta informação seja útil para outra pessoa. :)

    
por 29.06.2018 / 11:43