Comment puis-je SSH dans “Bash on Ubuntu on Windows 10”?

99

J'ai Windows 10 Anniversary Edition avec "Bash sur Ubuntu sous Windows" installé et fonctionnel. J'aimerais pouvoir utiliser SSH dans cette instance Ubuntu, mais bien que j'ai le serveur openssh installé et configuré (et que j'écoute sur le port 2200), lorsque j'essaie d'utiliser ssh sur "localhost: 2200", le message "Serveur inattendu" s'affiche. connexion réseau fermée ".

Est-ce que quelqu'un a réussi à accomplir cela?

entrez la description de l'image ici

Mick
la source
En utilisant Process Hacker et en consultant l'onglet "Réseau", il apparaît que sshd (fonctionnant sous Ubuntu sous Windows 10) écoute sur le port local 2200.
Mick
et si vous essayez de vous connecter à l'adresse IP du système? Ubuntu mappe souvent les adresses de bouclage différemment de Windows et utilise des valeurs supplémentaires dans 127.0.0.0/8 (souvent 127.0.1.1)
Frank Thomas
@Ramhound: Ce n'est pas vrai. Localhost est localhost et tout est partagé. Vous pouvez parfaitement le faire links http://localhost/depuis le sous-système Linux et voir la page Web fournie par IIS côté Windows. Il n'y a pas de séparation.
Sami Kuhmonen

Réponses:

120

Je l'ai eu pour travailler; Voici comment.

Ssh-server désinstallé, réinstallé et assurez-vous qu'il a démarré avec

sudo service ssh --full-restart

Assurez-vous d'avoir désactivé l'accès root et ajouté un autre utilisateur dans le fichier de configuration.

J'ai pu me connecter au sous-système le 127.0.0.1:22 comme prévu. J'espère que cela t'aidera.

Voici une capture d'écran.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config et interdire la connexion root en définissant PermitRootLogin no
  4. Ajoutez ensuite une ligne sous celle-ci qui dit:

    AllowUsers yourusername

    et assurez-vous qu’il PasswordAuthenticationest réglé sur yessi vous voulez vous connecter avec un mot de passe.

  5. Désactivez la séparation des privilèges en ajoutant / modifiant: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Connectez-vous à votre sous-système Linux à partir de Windows à l'aide d'un client ssh tel que PuTTY.

Maître Azazel
la source
2
je n'avais pas à faire cela - étrange .. mais souvenez-vous que c'est toujours au stade bêta, donc les résultats peuvent varier
Maître Azazel
7
En outre, je devais: arrêter / désactiver Windows 10 SSH Server Broker Services à partir du panneau de configuration des services et définir: PubkeyAuthentication no dans sshdconfig
math0ne
6
J'avais aussi besoin d'ajouter une règle de pare-feu. Il existait une règle existante, mais elle ne concernait que le proxy du serveur SSH Windows, et lorsque j'ai arrêté ce service, le pare-feu a bloqué le trafic sur le port 22.
Pierre-Luc Paour le
2
Je devais aussi changer de ports ( Port 2222dans le /etc/ssh/sshd_configfichier), sinon le serveur ssh de Windows
captait
2
@ArtemRussakovskii ils arrêtent tout le sous-système Linux chaque fois que vous fermez la fenêtre de bash ...
Sakher
27

L'implémentation Windows ne fournissant pas de chroot, vous devez modifier le fichier / etc / ssh / sshd_config.

UsePrivilegeSeparation no

Aussi, vous devrez créer un utilisateur en utilisant la commande useradd ou autre.

d1val
la source
4
Cette étape était essentielle pour que cela fonctionne.
Mick
1
J'étais curieux, j'ai donc trouvé ceci sur freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013
Spécifie si sshd (8) sépare les privilèges en créant un processus enfant sans privilège pour traiter le trafic réseau entrant. Une fois l'authentification réussie, un autre processus, doté du privilège de l'utilisateur authentifié, sera créé. L'objectif de la séparation des privilèges est d'empêcher l'ascension des privilèges en limitant toute corruption au sein des processus non privilégiés. L'argument doit être "oui", "non" ou "bac à sable". Si UsePrivilegeSeparation est défini sur "sandbox", le processus non privilégié de pré-authentification est soumis à des restrictions supplémentaires. La valeur par défaut est "sandbox".
krs013
7
WSL a mis en œuvre chroot en septembre 2016 (après cette réponse).
GreenReaper
24

Les réponses du comité ci-dessus étaient excellentes. Merci pour eux. Et bien qu'ils soient venus très près, Connection avait encore fermé 127.0.0.1 problèmes.

J'ai trouvé et ajouté des étapes supplémentaires à partir de ce post qui m'a permis de surmonter la bosse. En particulier, en recommençant et en ajoutant ceci comme première / première étape (notez le qualificatif --purge ), j'ai finalement résolu ma variante de ce problème:

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

Merci encore, j'espère que cet ajout aidera les autres. = :)

NYCeyes
la source
2
Pourquoi le vote négatif? Ces instructions seules ne fonctionnaient pas dans mon cas, comme mentionné, et l'étape supplémentaire ci-dessus fonctionnait. Je ne comprends pas.
NYCeyes
1
J'avais une erreur très différente "Aucune méthode d'authentification prise en charge disponible (serveur envoyé: publickey)" et cette procédure a été corrigée.
Mike Viens
2
Pour une raison quelconque, Windows n’avait tout simplement pas compris que j’exécutais le port 2222. Il n’a jamais montré d’autres processus l’utilisant, et il n’y avait aucune preuve de conflit de port, mais dès que j’ai changé de port, travail.
Forresthopkinsa
Le port 2222 ne fonctionne pas pour moi non plus, aucun autre service ne fonctionne, mais 22 fonctionne, ce qui est un problème car je souhaite disposer de plusieurs connexions SSH.
mFeinstein
4

J'ai tout fait comme suggéré par Maître Azazel et eu le problème. Lorsque je me suis connecté au port, 22un mot de passe m'a été demandé, mais le mot de passe que j'ai défini dans le sous-système Linux ne fonctionnait pas.

Solution n ° 1:
changez le port SSH /etc/ssh/sshd_configet redémarrez le serveur SSH du sous-système

Solution n ° 2:
désactivez / arrêtez "SSH Server Broker Services" dans le panneau de configuration des services de Windows et redémarrez le serveur SSH du sous-système.

Scotty86
la source
1
Ceci ne s'applique que si quelque chose tourne sur Windows sur le port 22.
Master Azazel
3
Ofcz, comme vous le voyez sur mon installation par défaut de win10, un service fonctionnait le 22 ...
scotty86
2

La raison pour laquelle vous ne pouvez pas utiliser SSH est indiquée dans la journalisation à partir du serveur:

chroot ("/ var / run / sshd"): fonction non implémentée [preauth]

Le sous-système Linux ne semble pas avoir implémenté chroot et le serveur ssh en a besoin pour que la connexion ne soit pas autorisée.

Sami Kuhmonen
la source
3
Ce qui est correct .. mais les autres réponses expliquent comment contourner l'exigence de chroot.
Mahmoud Al-Qudsi