Como posso fazer o SSH no "Bash no Ubuntu no Windows 10"?


99

Eu tenho o Windows 10 Anniversary Edition com o "Bash no Ubuntu no Windows" instalado e funcionando. Eu gostaria de poder fazer o SSH nessa instância do Ubuntu, mas apesar de ter o openssh-server instalado e configurado (e escutando na porta 2200), quando tento ssh para "localhost: 2200", ele me diz "Server inesperadamente conexão de rede fechada ".

Alguém foi capaz de fazer isso com sucesso?

insira a descrição da imagem aqui


Usando o Process Hacker e olhando para a guia 'Rede', ele mostra que o sshd (em execução no Ubuntu no Windows 10) está escutando na porta local 2200.
Mick

e se você tentar se conectar ao endereço IP do sistema? Ubuntu frequentemente mapeia endereços loopback diferente do Windows faz e usa valores adicionais em 127.0.0.0/8 (muitas vezes 127.0.1.1)
Frank Thomas

@ Ramhound: Não é verdade. Localhost é localhost e tudo é compartilhado. Você pode perfeitamente fazer isso links http://localhost/no subsistema Linux e ver a página da Web fornecida pelo IIS no lado do Windows. Não há separação.
Sami Kuhmonen 9/08/16

Respostas:


120

Eu fiz funcionar; aqui está como.

Ssh-server desinstalado, reinstalado e certifique-se de que foi iniciado com

sudo service ssh --full-restart

Verifique se você desativou o acesso root e adicionou outro usuário no arquivo de configuração.

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

Aqui está uma captura de tela.

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

    AllowUsers yourusername

    e verifique se PasswordAuthenticationestá definido como yesse você deseja fazer 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 PuTTY.


2
eu não tenho que fazer isso - estranho .. mas lembre-se este ainda está em fase beta por isso os resultados podem variar
Mestre Azazel

7
Além disso eu tinha que: Pare / desabilitar o Windows 10 SSH Serviços de mediação Server a partir do painel de controle serviços e definir: PubkeyAuthentication não na sshdconfig
math0ne

6
Eu também precisava adicionar uma regra de firewall. Havia uma regra existente, mas isso foi apenas para o Proxy do Windows SSH Server, e quando eu parei de que o serviço, o firewall bloqueou o tráfego na porta 22.
Pierre-Luc Paour

2
Eu também tive que mudar as portas ( Port 2222no /etc/ssh/sshd_configarquivo), se não o servidor ssh do Windows pegou a conexão na porta 22. #
arod

2
@ArtemRussakovskii eles param todo o subsistema Linux sempre que você fechar a janela de festa ...
Sakher

27

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.


4
Esta etapa foi essencial para fazê-la funcionar.
Mick

1
Fiquei curioso, então eu encontrei isso em freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013

Especifica se o sshd (8) separa privilégios, criando um processo filho sem privilégios para lidar com o tráfego de rede recebido. Após a autenticação bem-sucedida, será criado outro processo com o privilégio do usuário autenticado. O objetivo da separação de privilégios é impedir a escalação de privilégios, contendo qualquer corrupção nos processos não privilegiados. O argumento deve ser "yes", "no" 'ou "sandbox". Se UsePrivilegeSeparation estiver definido como "sandbox", o processo não privilegiado de pré-autenticação estará sujeito a restrições adicionais. O padrão é "sandbox".
Krs013


24

As respostas do comitê acima foram ótimas. Obrigado por eles. E enquanto eles chegaram super perto, eu ainda tinha o Connection fechado por problemas de 127.0.0.1 .

Encontrei e adicionei etapas adicionais a partir deste post, que me superaram. Em particular, começar de novo e adicioná-lo como a etapa inicial / primeira (observe o qualificador --purge ), finalmente resolveu minha variação desse problema:

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 outras pessoas. = :)


2
Por que o voto negativo? Somente essas instruções não funcionaram no meu caso, como mencionado, e a etapa adicional acima funcionou. Eu não entendo.
NYCeyes

1
Eu estava tendo um erro muito diferente "Nenhum método de autenticação compatível disponível (servidor enviado: publickey)" e essas etapas o corrigiram.
Mike Viens

2
Por alguma razão, o Windows simplesmente não percebeu que eu estava executando na Porta 2222. Ele nunca mostrou nenhum outro processo usando-o e não havia evidências de conflito de portas, mas assim que mudei de portas, ele começou a trabalhos.
Forresthopkinsa

A porta 2222 também não funciona para mim, nenhum outro serviço está sendo executado, mas a 22 funciona, o que é um problema, pois quero ter várias conexões SSH.
mFeinstein

4

Fiz tudo o que o Mestre Azazel sugeriu e tive o problema. Quando me conectei à porta, 22fui solicitada uma senha, mas a senha que eu defini no subsistema Linux não funcionou.

Solução 1:
altere a porta SSH /etc/ssh/sshd_confige reinicie o servidor SSH no subsistema

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


1
Isso só se aplica se você tem algo em execução no windows na porta 22.
Mestre Azazel

3
Ofcz, como você pode ver no meu instalação padrão do win10 havia um serviço executado em 22 ...
scotty86

2

O motivo pelo qual você não pode fazer o ssh é mostrado no log do servidor:

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

O subsistema Linux parece não ter o chroot implementado e o servidor ssh precisa dele, portanto a conexão não é permitida.


3
O que está correto .. mas as outras respostas explicam como solucionar o requisito chroot.
Mahmoud Al-Qudsi
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.