Tanto quanto eu posso dizer, isso é um bug no WSL. Espero que a Microsoft conserte isso na próxima versão. Mas por enquanto, podemos usar esse hack um pouco feio.
Atualização # 1 : Definitivamente, um bug. Encontrou este problema no Github. A proposta alternativa de relançar o shell também funciona para mim se você não quiser passar por tudo isso.
TL; DR Adicione isto para END sua configuração de SSH (normalmente localizada em ~/.ssh/config
):
Host *
ProxyCommand nc %h %p %r
Veja por que isso funciona:
Nosso problema de SSH não é um problema de firewall porque nc
e telnet
funcionam no mesmo host e porta (tente telnet <host> <port>
ou nc <host> <port>
: você verá algo como SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
). Isso podemos usar a nosso favor.
O SSH permite o uso de proxies que recebem entradas padrão e as enviam para a porta do servidor por meio da opção ProxyCommand
. Isso é normalmente usado para encapsular redes em um host protegido usando um servidor SSH de bastiões intermediário, às vezes chamado de host de salto (veja este link para mais informações).
Este hack diz ao SSH para usar um proxy sem host de salto (s). Assim, ele contorna a alocação falha de recursos TCP do SSH, empurrando toda a alocação de recursos de rede para o Netcat, o que funciona. O SSH apenas faz sua conexão SSH sem nenhuma conexão de rede, e o Netcat envia os dados brutos através de uma conexão TCP ao servidor SSH.
AVISO: Como isso modifica o ProxyCommand
para todos os hosts, não sei como ele interage com outros hosts de configuração do SSH que usam ProxyCommand
. Eu tenho alguns servidores com os quais posso testar isso e atualizarei essa resposta com os resultados. Há uma chance de que não haja efeitos colaterais prejudiciais, mas não posso garantir isso.
Atualização # 2: Eu fiz alguns testes com alguns dos meus servidores, e isso parece funcionar. O SSH usa a entrada mais superior na configuração quando várias entradas são aplicadas. Assim, um ProxyCommand
existente presente acima dessa invasão o substituiria. Quando o novo comando SSH é executado, ele relê a configuração do SSH e, se não houver outro ProxyCommand
, o SSH usa nosso hack ProxyCommand
, permitindo que ele se aplique somente à sessão SSH "mais externa". Palavra de aviso: se você colocar o hack no topo do arquivo de configuração (ou acima da entrada para a qual você está tentando fazer SSH), as sessões SSH que exigem ProxyCommand
irão ignorar o outro ProxyCommand
e tentarem resolver o problema endereço do host e se conectar diretamente com a Netcat.