SSH: Resolução de problemas de erros “Falha no encaminhamento de porta remota para porta de escuta”


4

Pergunta: Por que ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> resultar em um erro "Encaminhamento de porta remoto falhou para a porta de escuta"? O objetivo é estabelecer um túnel reverso com o 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á tentou:

  1. Pesquisou a literatura existente sobre o Google, Stackoverflow, etc. Existem tópicos relativos a esta mensagem de erro, no entanto as resoluções dadas resolvem causas raiz diferentes daquela desta instância particular porque essas resoluções não resolvem o erro neste caso.
  2. Eu realizei vários diagnósticos para validar as portas necessárias estão abertas. Alguns desses resultados são mostrados na imagem abaixo.

Túnel SSH reverso

Image 1

Atualizar

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

Deveria ser: reduser@redhost:~ ssh greenuser@bluehost -p 2222 Você deseja usar as credenciais de usuário verde no IP bluehost porque o host no qual você está efetuando quando você usa a porta 2222 é realmente o host verde.



@balwa Verificado, mas trata-se de conexões que expiram após um período de tempo. A conexão nunca é bem-sucedida no meu caso. Eu também faço uso dos parâmetros KeepAliveInterval para que haja controle explícito sobre alguns dos fatores de tempo.
ngm_code

@ModeratorImpersonator tentou ssh -N -R <bluehost_ip>:2222:localhost:22 e ssh pareceu levar isso como sintaxe inválida. ssh simplesmente retornou usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec] ...
ngm_code

@Ramhound Eu reformulei a pergunta para ser mais direta. Por favor, retire a postagem ou faça comentários mais específicos sobre o motivo pelo qual ela foi colocada em espera.
ngm_code

@DavidPostill Eu não concordo com este post sendo colocado em espera. A questão, o que faz com que a mensagem de erro assim e assim é, na minha opinião, perfeitamente aceitável.
MariusMatutiae

Respostas:


11

Porque ssh -N -R 2222:localhost:22 <bluehost_user>@<bluehost_ip> resultar em um erro "Encaminhamento de porta remoto falhou para a porta de escuta"?

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 lá. Não mostra o que é isso.

Soluções:

  1. mudança 2222 na tua ssh invocação para alguma outra porta que não está em uso em bluehost. Basta torná-lo maior que 1023 porque usuários comuns não podem se ligar a portas bem 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 bluehost ) com sudo lsof -i TCP:2222; terminar ou reconfigurá-lo para fazer a porta 2222 acessível.

Editar:

No seu caso, esta parte do 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

[...] Por padrão, os soquetes de escuta do TCP no servidor serão vinculados somente à interface de loopback. Isso pode ser substituído especificando um bind_address. Um vazio bind_address, ou o endereço " * ', Indica que o soquete remoto deve escutar em todas as interfaces. Especificando um controle remoto bind_address só terá sucesso se o servidor GatewayPorts opção está ativada (consulte sshd_config(5) ).

Isso significa que você deveria ter GatewayPorts yes no sshd_config em bluehost. Ler man 5 sshd_config aprender mais. Não esqueça de recarregar o serviço depois.


Curiosamente, estou vendo uma conexão da China (note que eu estava usando este host como uma VPN da China quando estive lá há algumas semanas). Enquanto este host é um sandbox, ainda é preocupante <bluehost_user>@<bluehost_ip>:~$ netstat | grep 2222 tcp 0 0 <bluehost_ip>:2222 htuidc.bgp.ip:2599 SYN_RECV Port 2222 aberto ou não, como se conectar sem um nome de usuário e senha (note que isso é tcp não ssh)? Eu tenho sshd ouvindo em 2222 como configurado em /etc/ssh/sshd_config.
ngm_code

Informação adicional de lsof: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1034 root 3u IPv4 13344 0t0 TCP *:2222 (LISTEN) sshd 1034 root 4u IPv6 13353 0t0 TCP *:2222 (LISTEN)
ngm_code

@ngm_code Então é o seu sshd que precisa ser reconfigurado. Ou apenas use outra porta quando você ssh -R de outro lugar.
Kamil Maciorowski

Ok, vou dar uma olhada. Então você está dizendo que é incompatível abrir uma porta via /etc/ssh/sshd_config antes de abri-lo em tempo de execução através de uma chamada para ssh no CLI?
ngm_code

@ngm_code Sim. Portas (ou uma porta, geralmente 22 ) configurado em sshd_config são para clientes SSH se conectarem. No seu caso você se conecta a uma dessas portas e pede sshd abrir adicional portar e encapsulá-lo na sua máquina. Se pudesse ser a mesma porta, sshd não saberia se os pacotes recebidos são destinados a ele ou ao túnel.
Kamil Maciorowski

3

Certifique-se de que não haja conexão suspensa na porta 2222 no bluehost. Teste no bluehost lsof -t -i:2222 se qualquer ID de processo está 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. :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.