Windows 10 Linux Subsystem SSH Client Resource temporariamente indisponível

24

Estou tentando fazer o ssh no meu servidor remoto dentro do Windows 10 Linux Subsystem. Estou usando o MS Windows 10 Home Insider Preview build 14366.

Enquanto estiver no prompt de comando, digite:

ssh [email protected]

Alguns segundos depois de digitar o comando ssh, estou recebendo a seguinte mensagem:

ssh: conectar ao host domain.com porta 22: recurso temporariamente indisponível

Consigo conectar-me com sucesso usando o Putty e também com o ssh no Git Bash.

Então, isso me leva a acreditar que o problema está no meu PC local e, mais especificamente, no subsistema Linux. Ainda sou muito verde com o ambiente Linux e não sei como interpretar essa mensagem. Que recurso não está disponível e o que devo fazer para disponibilizá-lo?

kell
fonte
Primeiro palpite: Firewall do Windows? ps> e bem-vindo ao superusuário :) O Google parece um pouco relacionado ao fork. Por favor editar o post e adicionar a linha de comando que lhe dar esse erro.
Hastur
relacionado
Ramhound 08/07
apenas verificando se você está usando uma versão do Insider Preview do Windows 10 porque o AFAIK, o subsistema Linux, está disponível apenas nesta versão, não no Windows 10. 'normal'. Caso contrário, talvez você esteja usando o Cygwin?
gogoud
@ggoud - Atualizei a pergunta para incluir o sistema operacional. Na verdade, é a construção da Visualização privilegiada.
kell
2
Eu também estou tendo esse problema. Ela afeta todos os programas apoiados pelo ssh, como giteapt-get
scicalculator

Respostas:

9

Até onde eu sei, isso é um bug na WSL. Felizmente, a Microsoft irá corrigi-lo na próxima versão. Mas, por enquanto, podemos usar esse hack ligeiramente feio.

Atualização # 1 : Definitivamente um bug. Encontrei esse problema no Github. Sua solução proposta de reiniciar o shell também funciona para mim, se você não quiser passar por tudo isso.

TL; DR Adicione isso para END sua configuração SSH (geralmente localizada em ~/.ssh/config):

Host *
    ProxyCommand nc %h %p %r

Aqui está o porquê funciona: questão Nossa SSH não é um problema de firewall porque nce telnettrabalho para o mesmo host e porta (experimente telnet <host> <port>ou nc <host> <port>: você deve 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 a entrada padrão e a enviam para a porta do servidor por meio da ProxyCommandopção Normalmente, isso é usado para conectar redes a um host protegido usando um servidor SSH bastião intermediário, às vezes chamado de host de salto (consulte este link para obter mais informações).

Esse hack indica ao SSH para usar um proxy sem host (s) de salto. Portanto, ele contorna a alocação com falha de recursos TCP do SSH, enviando toda a alocação de recursos de rede para o Netcat, o que funciona. O SSH apenas executa o seu SSH sem nenhuma conexão de rede e o Netcat envia os dados brutos através de uma conexão TCP para o servidor SSH.

AVISO: Como isso modifica o ProxyCommandpara todos os hosts, não sei como ele interage com outros hosts de configuração SSH que usam ProxyCommand. Eu tenho alguns servidores com os quais posso testar isso e atualizarei esta resposta com os resultados. Há uma chance de que não haja efeitos colaterais prejudiciais, mas não posso garantir isso.

Atualização 2: fiz alguns testes com alguns dos meus servidores, e isso parece funcionar. O SSH usa a entrada mais alta na configuração quando várias entradas se aplicam. Assim, um ProxyCommandpresente existente acima desse hack o substituirá. 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 apenas à sessão SSH "mais externa". Palavra de aviso: se você colocar o hack na parte superior do arquivo de configuração (ou acima da entrada para a qual você está tentando fazer o SSH), as sessões do SSH que exigem um ProxyCommandignorarão o outro ProxyCommande tentarão resolver o endereço do host e conectar-se. diretamente com o Netcat.

computergeek125
fonte
Obrigado pelo detalhe @ computergeek125. Infelizmente, mesmo depois de definir a configuração conforme sugerido, ainda recebo a mesma mensagem ssh: conectar ao host domain.com porta 22: Recurso temporariamente indisponível Quando executo nc -v <host> <port>, para uma saída detalhada, recebo o mesmo erro: Recurso temporariamente indisponível. Eu posso estar fazendo algo errado, não tenho certeza. Como não tenho problemas com o ssh usando o shell do Git bash, continuarei com ele por enquanto. BTW, meu sistema está agora na compilação 14393, portanto, se esse era um bug na versão no momento da pergunta, ainda é um bug que 27 compila mais tarde.
kell
Bem, isso é interessante. Vou ter que fazer alguma pesquisa sobre essa compilação. Eu estava executando o 14903 no momento (estou com 14905 agora). Pode ser algo que eles consertaram na compilação que eu tenho.
computergeek125
Como edito a configuração do SSH? No bash para console do Windows, tentei o vi ~/.ssh/configque abriu um arquivo vazio. Colei seus comandos, mas quando eu tentar salvar (esc ->: -> wq) ele me diz"~/.ssh/config" E212: Cannot open file for writing
Dan
Ok, isso é estranho. Qual versão do Windows você está executando e qual é a saída ls -al ~/.ssh?
computergeek125
3

Isso também foi um problema para mim, pois era o meu firewall (Symantec) bloqueando todo o tráfego da Internet do bash.

Parece que é um problema geral com fornecedores de firewall de terceiros que não reconhecem o processo:

https://github.com/Microsoft/BashOnWindows/issues/809

Quando desativei meu firewall, ele funcionou bem. Não é possível encontrar uma solução melhor no momento.

Andrew Jones
fonte
0

No meu caso, recebi esse erro porque uma atualização do Windows causou problemas no meu comutador Hyper-V . Acontece que o host para o qual eu estava tentando ssh estava conectado a esse comutador - corrigindo o ssh restaurado.

MatrixManAtYrService
fonte
0

Para referência futura, ao instalar o Nginx, ele bloqueará o SSH por padrão com a mensagem de erro "Recurso temporariamente indisponível", a menos que você ...

sudo ufw permitir ssh

andrerpena
fonte
O próprio Windows 10 possui um firewall. Por que você sugeriu isso?
Biswapriyo 23/02
Estou sugerindo que, para futuros usuários com os mesmos problemas, porque eu tive exatamente o mesmo problema e porque o Nginx estava bloqueando o SSH no servidor
andrerpena