Questão Como posso SSH em "Bash no Ubuntu no Windows 10"?


Eu tenho o Windows 10 Anniversary Edition com "Bash no Ubuntu no Windows" instalado e funcionando. Eu gostaria de ser capaz de SSH para esta instância do Ubuntu, mas embora eu tenha openssh-servidor instalado e configurado (e escuta na porta 2200), quando eu tento ssh para "localhost: 2200", ele me diz "Servidor inesperadamente conexão de rede fechada ".

Alguém conseguiu fazer isso com sucesso?

enter image description here


80


origem


Usando o Process Hacker e olhando para a aba 'Network', ele mostra que o sshd (rodando no Ubuntu no Windows 10) está escutando na porta local do 2200. - Mick
e se você tentar se conectar ao endereço IP do sistema? O Ubuntu geralmente mapeia endereços de loopback de maneira diferente do que o Windows, e usa valores adicionais em 127.0.0.0/8 (geralmente 127.0.1.1) - Frank Thomas
@Ramhound: não é verdade. Localhost é localhost e tudo é compartilhado. Você pode perfeitamente fazer links http://localhost/ do subsistema Linux e veja a página da Web fornecida pelo IIS no lado do Windows. Não há separação. - Sami Kuhmonen


Respostas:


Eu tenho que trabalhar. aqui está como.

Desinstalado ssh-server, reinstalado e certificou-se de que é iniciado com

sudo service ssh --full-restart

Certifique-se de ter desativado o acesso root e adicionado outro usuário no arquivo de configuração.

Consegui conectar-me ao subsistema em 127.0.0.1:22 como esperado. Eu espero que isso te ajude.

Here's a screenshot.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config e desabilitar o login raiz, definindo PermitRootLogin no
  4. Em seguida, adicione uma linha abaixo dele que diz:

    AllowUsers yourusername

    e certifique-se PasswordAuthentication está configurado para yes se você quiser fazer o login usando uma senha.

  5. Desative a separação de privilégios adicionando / modificando: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Conecte-se ao seu subsistema Linux a partir do Windows usando um cliente ssh como o PuTTY.


93



Eu não tive que fazer isso - estranho .. mas lembre-se que este ainda está em fase beta para que os resultados possam variar - Master Azazel
Além disso, tive que: Parar / Desabilitar o Windows 10 SSH Server Broker Services no painel de controle de serviços e definir: PubkeyAuthentication no no sshdconfig - math0ne
Eu também precisava adicionar uma regra de firewall. Havia uma regra existente, mas isso era apenas para o Proxy do Servidor SSH do Windows e, quando eu parei esse serviço, o firewall bloqueou o tráfego na porta 22. - Pierre-Luc Paour
Eu também tive que mudar de porta (Port 2222 dentro /etc/ssh/sshd_config arquivo), se não o servidor ssh do Windows pegou a conexão na porta 22. - arod
@ArtemRussakovskii eles param todo o subsistema Linux sempre que você fechar a janela do bash ... - Sakher


Como a implementação do Windows não fornece chroot, você precisa modificar o / etc / ssh / sshd_config

UsePrivilegeSeparation no

Além disso, você precisará criar um usuário usando o comando useradd ou algo assim.


23



Este passo foi essencial para que funcionasse. - Mick
Eu estava curioso, então eu encontrei isso em freebsd.org/cgi/man.cgi?sshd_config(5): UsePrivilegeSeparation: - krs013
Especifica se o sshd (8) separa os privilégios criando um processo filho sem privilégios para lidar com o tráfego de entrada da rede. Após a autenticação bem-sucedida, outro processo será criado e terá o privilégio do usuário autenticado. O objetivo da separação de privilégios é evitar o escalonamento de privilégios, contendo qualquer corrupção nos processos sem privilégios. O argumento deve ser "sim", "não" ou "sandbox". Se UsePrivilegeSeparation estiver definido como "sandbox", o processo sem pré-autenticação está sujeito a restrições adicionais. O padrão é "sandbox". - krs013
A WSL implementou o chroot em setembro de 2016 (após esta resposta). - GreenReaper


As respostas do comitê acima foram ótimas. Obrigado por eles. E enquanto eles chegaram muito perto, eu ainda tinha Conexão fechada por 127.0.0.1 problemas.

Eu encontrei e adicionei etapas adicionais de esta postagem o que me deixou sobre a corcunda. Em particular, começar de novo e adicionar isso como o primeiro passo inicial --purga qualifier), finalmente resolvi minha variação desta questão:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

Mais uma vez obrigado, espero que esta adição ajude os outros. = :)


16



Por que o downvote? Essas instruções sozinhas não funcionaram no meu caso, como mencionado, e a etapa adicional acima funcionou. Eu não entendo. - prismalytics.io
Eu estava tendo um erro muito diferente "Não há métodos de autenticação suportados disponíveis (servidor enviado: publickey)" e essas etapas corrigiram isso. - Mike Viens
Por alguma razão, o Windows simplesmente não gostou do fato de eu estar rodando na porta 2222. Ele nunca mostrou nenhum outro processo usando-o, e não havia evidências de conflito de porta, mas assim que eu mudei de porta, ele começou a trabalhos. - forresthopkinsa


Eu fiz tudo como o Mestre Azazel sugeriu e teve o problema. Quando conectei a porta 22 Me pediram uma senha, mas a senha que eu configurei no subsistema Linux não funcionou.

Solução # 1:
alterar a porta SSH em /etc/ssh/sshd_config e reinicie o servidor SSH no subsistema

Solução 2:
desabilite / interrompa o "SSH Server Broker Services" no painel de controle de serviços do Windows e reinicie o servidor SSH no subsistema.


5



Isso só se aplica se você tiver algo em execução no Windows na porta 22. - Master Azazel
Ofcz, como você vê na minha instalação padrão do win10, havia um serviço rodando em 22 ... - scotty86


A razão pela qual você não pode ssh para ele é mostrado no log do servidor:

chroot ("/ var / run / sshd"): Função não implementada [preauth]

O subsistema Linux não parece ter o chroot implementado e o servidor ssh precisa dele para que a conexão não seja permitida.


2



O que é correto ... mas as outras respostas explicam como contornar o requisito de chroot. - Mahmoud Al-Qudsi