Il aura fallu être très patient, mais ça y est, Microsoft a enfin intégré un support natif de SSH sur Windows ! Depuis la mise à jour de septembre 2017 de Windows 10 (Fall Creators Update), il est en effet possible d'installer un client et un serveur OpenSSH natif. Plus besoin de Putty, Cygwin ou autres verrues diverses et variées, ni même de passer par le sous-système Windows pour Linux introduit en 2016. C'est bel et bien du 100% natif Windows !
Une nouveauté qui contribuera à améliorer l'interopérabilité entre Windows et Linux, en permettant de se connecter à un serveur Linux depuis Windows et inversement, et qui pourrait simplifier l'usage de certains outils de gestion de configuration comme Ansible.
Mais pour le moment, cela reste toutefois une implémentation en bêta et Microsoft déconseille de l'utiliser sur un environnement de production critique.
Installation du client et/ou du serveur SSH
Ce support de SSH est fourni en tant que fonctionnalité facultative. Il faut donc passer par une rapide installation pour pouvoir en bénéficier.
Avant toute chose, vérifiez bien que vous possédez la dernière version de Windows 10 en date (1709 minimum), et que toutes les mises à jour disponibles sont installées.
Ensuite, rendez-vous dans les Paramètres Windows via le bouton « roue dentée » du menu Démarrer ou le raccourci clavier Win+I, puis cliquez sur Applications. A l'écran suivant, cliquez ensuite sur Gérer les fonctionnalités facultatives, puis sur le bouton Ajouter une fonctionnalité.
Dans la liste des fonctionnalités optionnelles disponibles, cliquez sur OpenSSH Client puis sur Installer. Si vous souhaitez également pouvoir vous connecter à distance par SSH à votre poste, vous pouvez installer le serveur SSH en sélectionnant OpenSSH Server.
Patientez quelques instants le temps de l'installation puis redémarrez le poste.
Utilisation du client SSH
Après redémarrage, vous pouvez ouvrir une invite de commandes et utiliser tout simplement la commande SSH comme vous le feriez sur Linux !
Notez que les commandes suivantes sont également disponibles :
scp
sftp
ssh-add
ssh-agent
ssh-keygen
Vous pouvez donc effectuer des transferts de fichiers avec scp
ou sftp
, ou générer des clés SSH avec ssh-keygen
.
Tous ces outils sont installés dans le dossier C:\Windows\System32\OpenSSH
, qui a automatiquement été ajouté à la variable d'environnement PATH
pour pouvoir les utiliser sans avoir à indiquer le chemin complet. Vous n'avez donc rien de plus à faire pour la partie cliente !
Configuration du serveur
Même si le serveur OpenSSH fonctionne comme un service Windows standard, que vous pourrez retrouver dans la console des Services sous le nom sshd
, sa mise en place est en revanche un peu plus délicate…
En effet, même après redémarrage, le service sshd
ne sera pas en fonctionnement et si vous tenter de le démarrer juste après l'installation, vous obtiendrez sans doute ce message d'erreur :
Windows n'a pas pu démarrer le service sshd sur Ordinateur local. Erreur 1067: Le processus s'est arrêté inopinément.
Pour comprendre ce qu'il se passe, vous pouvez alors consulter le contenu du fichier C:\Windows\System32\OpenSSH\Logs\sshd.log
. Vous y trouverez très certainement une ligne indiquant que le serveur n'a pas réussi à trouver le fichier correspondant à la clé de l'hôte.
5272 11:06:28:910 error: Could not load host key: ./ssh_host_rsa_key 5272 11:06:28:910 error: Could not load host key: ./ssh_host_dsa_key 5272 11:06:28:910 error: Could not load host key: ./ssh_host_ed25519_key 5272 11:06:28:910 sshd: no hostkeys available -- exiting.
Avant de pouvoir démarrer le serveur, il faut en effet générer manuellement la clé de l'hôte qui servira à chiffrer la communication entre le serveur et le client. Pour cela, ouvrez une invite de commande en tant qu'Administrateur et tapez les commandes suivantes :
cd C:\Windows\System32\OpenSSH ssh-keygen.exe -A
Cela va générer une paire de clés nommées ssh_host_ed25519_key
(clé privé) et ssh_host_ed25519_key.pub
(clé publique) dans le dossier C:\Windows\System32\OpenSSH
.
Une fois ces commandes exécutées, vous pouvez fermer l'invite de commande. Toutefois ce n'est toujours pas suffisant pour que le serveur SSH démarre. Si vous essayer tout de même, vous retomberez sur le même message que précédemment.
Il reste en effet une dernière étape à réaliser : modifier les permissions sur les fichiers générés précédemment. En effet, le compte NT Service\sshd
utilisé pour le fonctionnement du service SSH n'a pas accès à ces fichiers. Pour corriger cela, ouvrez les propriétés du fichier ssh_host_ed25519_key
et, dans l'onglet Sécurité
, effectuez les opérations suivantes :
- Changer le propriétaire du fichier pour
NT Service\sshd
. - Donnez seulement la permission de lecture au compte
NT Service\sshd
. - Retirer toutes les autres permissions y compris pour les éventuels autres utilisateurs.
Une fois cela fait, vous devriez obtenir les permissions suivantes pour le fichier ssh_host_ed25519_key
:
Si les permissions ne sont pas définies correctement, le service refusera de démarrer et un message WARNING: UNPROTECTED PRIVATE KEY FILE
sera écrit dans le fichier journal.
Une fois que tout est correct, vous pouvez relancer le serveur SSH en démarrant le service sshd
. Cette fois, tout devrait bien se passer.
Il vous reste encore à définir un mot de passe pour votre compte utilisateur si toutefois vous n'en aviez pas, ainsi qu'à ouvrir le port 22 sur le pare-feu Windows du serveur. Vous pouvez pour cela utiliser la commande suivante :
netsh advfirewall firewall add rule name="Service SSH" dir=in action=allow protocol=TCP localport=22
A partir de là vous pouvez vous connecter en SSH à votre serveur depuis un poste distant. Vous obtiendrez une invite de commande complète depuis laquelle vous pourrez lancer toutes les commandes habituellement disponibles en local, y compris Powershell.
Vous pourrez également vous connecter à distance au système de fichiers via SFTP en utilisant un client comme WinSCP, ce qui vous permettra de parcourir l'arborescence du serveur et de transférer des fichiers d'une machine à une autre.
A savoir, cette première implémentation souffre encore de quelques limitations. En particulier, elle ne supporte que les clés de type ED25519, ce qui peut causer des soucis de compatibilité avec certains clients et serveurs plus anciens qui ne gèrent pas encore ce type de clés. Aussi, je pense que l'installation de la partie serveur gagnerai à être mieux automatisée pour plus de simplicité. Mais cela reste une bêta et gageons que cela s'améliore rapidement lors de prochaines mises à jour...
Bonjour, merci pour ce tuto.
J'ai tout paramétré mais je n'arrive pas à me connecter ni avec winscp ou autre (es eplorateur android), quand vous parler de choisir un mot de passe pour note compte utilisateur, est-ce celui à renseigner dans l'onglet connexion des propriétés du service sshd? car si j'arrive bien à rentrer un mot de passe pour l'utilisateur NT service\sshd et que je redemarre le service impossible de me connecter, quand j'utilise winscp il me demande un mot de passe et m'indique à chaque fois accès refusé! Pourriez-vous m'aider Merci.
Bonjour,
Non il n'y a rien à faire au niveau de cet onglet, il s'agit du mot de passe d'un compte utilisateur classique utilisé pour se connecter au poste, votre propre compte par exemple. Ensuite, il faut utiliser ce même nom d'utilisateur et mot de passe pour ouvrir la session à distance. Le compte sshd ne sert qu'au fonctionnement du service, rien de plus.
Vérifiez également que vous avez bien la dernière version de WinSCP ou Putty, comme indiqué en fin d'article pour le moment le serveur SSH fourni ne supporte que le type de clés le plus récent, donc il peut y avoir des incompatibilités avec certains clients.
Bonjour,
Merci pour les infos.
Je viens de commencer à utiliser SSH sur windows. Mais je rencontre un petit problème. Mon ordinateur principal est sous windows et je fais des calculs sous linux. J'utilise SSH pour me connecter à distance aux PC (sous Ubuntu). La connexion s'établie normalement au début et au bout de quelques heures, le système se déconnecte. Et donc toutes les taches s’arrêtent.
Une solution à ce problème me ferait gagner du temps pour mes calculs.
Mer d'avance .
Bonjour,
Vous pouvez utiliser la commande nohup pour éviter que l'exécution soit interrompue en cas de déconnexion.
Une autre solution consiste à utiliser les paramètres SSH ClientAliveInterval et ClientAliveCountMax côté serveur, ou ServerAliveInterval côté client pour configurer les délais de déconnexion
Ça marche problème résolu.
Merci beaucoup.
Une solution sera d'utiliser
tmux
ouscreen
sous Linux.Deux solutions pour detacher (et re-attacher) la session d'un terminal.
Via SSH, screen (ou tmux) peut ouvrir une session screen sur un pc distant et de laisser active une commande en exécution tout en se déconnectant totalement du pc distant.
Puis, ultérieurement, de revenir sur cette commande dans la même session screen.
Voir http://debian-facile.org/doc:autres:screen
Bonjour
j'ai suivi votre tuto et lorsque je veux démarrer le service sshd j'ai ce message
windows n'a pas pu démarrer le service sshd sur l'ordinateur local
Erreur 1297 un privilège exigé par le service pour fonctionner correctement n'existe pas dans la configuration du compte du service
pouvez vous m'aider
cordialement
pierre chevalier
Bonjour,
Ce message laisse penser que le compte
NT Service\sshd
utilisé par le servicesshd
pour fonctionner n'a pas les privilèges requis.Si vous utilisez l'édition Professionnel de Windows 10, essayer de lancer la console
secpol.msc
, puis naviguez dansStratégies locales
->Attribution des droits utilisateur
, et ajouter le compteNT Service\sshd
aux permissionsOuvrir une session en tant que service
etRemplacer un jeton de niveau processus
.Bonsoir
merci pour votre réponse rapide
j'utilise Windows10 family
comment faire?
Cordialement
Sur Windows 10 Home, je crois que la seule solution est d'utiliser la commande secedit. Mais c'est plus technique et un peu difficile à expliquer ici.
Sinon essayez de désinstaller la fonctionnalité OpenSSH Server puis de recommencer...
Bonsoir
grâce à vos conseils, j'ai réussi à démarrer le service sshd
j'ai créé un tunnel entre 2 raspberry, l'un est serveur et l'autre client
sur le client ssh -N -R 10022:127.0.0.1:22 pi@192.168.0.xx (établissement du tunnel)
sur le serveur ssh -p 10022 pi@127.0.0.1
je voudrais faire la mème chose entre un raspberry client vers windows serveur
pouvez vous m'aider ?
cordialement
Normalement cela se fait exactement de la même manière, les lignes de commandes sont les mêmes.
Bonsoir
merci pour la réponse rapide
mais quel utilisateur pour remplacer pi@192.168.0.xx
cordialement
N'importe quel compte utilisateur existant sur le poste/serveur Windows (celui que vous utilisez pour ouvrir votre session par exemple), à condition qu'un mot de passe soit défini.
Bonjour
merci de votre aide
tout fonctionne correctement
je n'avais pas ouvert le port 22
avec votre commande
netsh advfirewall firewall add rule name="Service SSH" dir=in action=allow protocol=TCP localport=22
tout est ok
encore merci
Cordialement
Bonjour,
Deux choses.
je n'arrivais pas à générer les clés en faisant la commande ssh-keygen.exe -A
Erreur suivante :
ssh-keygen.exe: generating new host keys: RSA Could not save your public key in __PROGRAMDATA__\\ssh/ssh_host_rsa_key.x6nTF12mPR: No such file or directory
ssh-keygen.exe: generating new host keys: DSA Could not save your public key in __PROGRAMDATA__\\ssh/ssh_host_dsa_key.X5kLD552GA: No such file or directory
ssh-keygen.exe: generating new host keys: ECDSA Could not save your public key in __PROGRAMDATA__\\ssh/ssh_host_ecdsa_key.pZcse7oqcM: No such file or directory
ssh-keygen.exe: generating new host keys: ED25519 Could not save your public key in __PROGRAMDATA__\\ssh/ssh_host_ed25519_key.qoNrVXFGMp: No such file or directory
En créant un répertoire ssh dans ProgramData, ça marche après.
D'autre part, je n'ai pas le service sshd ?
j'ai un service SSH Server Broker, un service SSH Server PRoxy, ssh-agent et SShdBrokermais pas le sshd.
Avez-vous une explication ?
Bonjour,
Étonnant, on dirait que ce n'est pas exactement la même implémentation....
Je n'ai pas vu ces services, il y a peut-être eu des changements depuis l'écriture de l'article. Il faudrait que je regarde ça à nouveau alors.
J'ai le même soucis, je n'ai pas de services sshd, mais ssh server broker et ssh server proxy
windows 10 ltsc 1801 de plus je n'ai pas installé openssh via via ajouter une fonctionnalité ce qui fait que mon dossier OpenSSH-W64 est dans programmes et .ssh est à la racine comme ils se doit
j'ai installé depuis cette page avec Chocolatey que j'avais déjà préinstallé
https://github.com/DarwinJS/ChocoPackages/tree/master/openssh
Voilà le dossier créer : https://imgur.com/a/Ge2IXDU
La conf par defaut de sshd.conf
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedPrincipalsFile none
# For this to work you will also need host keys in %programData%/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# override default of no subsystems
Subsystem sftp sftp-server.exe
# Example of overriding settings on a per-user basis
#Match User anoncvs
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
Le dossier .ssh contient id_rsa et id_rsa.pub je sais pas trop qu'en faire puisqu'il me faut un .ppk.
Faut-il transformer le .pub en .ppk ou remplacer les deux clefs id_rsa et id_pub par deux autres clefs générées avec puttygen ?
En espérant faire avancer le schmilblick
Ce n'est donc pas la même implémentation, donc normal que l'on ne retrouve pas exactement les mêmes services !
Ces fichiers contiennent certainement la clé publique et privée qui permettent de s'authentifier sur un serveur distant. Si vous utilisez le client ssh fourni par OpenSSH (commande ssh), dans ce cas il n'y a pas besoin d'un ppk, ce seront ces fichiers qui seront utilisés.
Absolument les deux clef sont générées mais même en utilisant id_rsa (clef privé) dans juicessh j'ai un message d'erreur java.io.IOExection: End of IO Stream Read et je comprends pas pourquoi....
J'ai même transformer cette id_rsa en .ppk avec puttygen et rebellote pas d'accès,mais cette fois c'est access denied
Si je veux un .ppk c'est pour utiliser winscp que j'aime beaucoup et que j'utilise tout autant!!
Je continu de tourner en rond c'est pénible et pourtant j'utilise ssh mais sur linux qui drôlement est plus simple...
je reste à l'écoute si quelqu'un trouve une soluce! merci
merci pour les infos...
déjà, faut pas oublier de créer le répertoire ssh sous C:\ProgramData
ça peut sembler normal, mais chez moi, il n'existait pas...
Bonjour,
Sous Windows 18.09, c'est beaucoup plus facile, il suffit d'installer le serveur, puis d'activer les services "openSSH server" et "openSSH Autentification Agent" après le redémarrage (et bien sur autoriser l'application ssh sur le pare-feu, mais avec le pare-feu windows, ça se fait automatiquement à l'installation du serveur).
Par contre, si vous utilisiez Cygwin auparavant... pensez à désactiver les services et supprimer le dossier avant d'installer le serveur ssh... j'ai tester sur un poste pour voir ce que ça faisais (je sais j'suis bête mais j'aime bien tester...) et les service cygwin disparaissent, donc impossible de les couper et de supprimer le dossier, et c'est bien galère à régler...
Quelle patience et pédagogie! Bravo!
Bonjour,
Merci pour votre tuto toutefois, j'ai 2 questions :
- Est ce que celui-ci est valable pour l'installation sur Windows server ?
- Et comment faire si je souhaite ajouter des utilisateurs avec des accès différents pour le transfert de fichiers SFTP ?
dans le cadre d'une connexion via WinSCP
Merci
Salut Polo
Oui c'est disponible sur windows server.
Par contre je ne pense que l'outils soir adapté pour faire des accées utilisateurs...
Bonjour
j'ai installer le serveur ssh et le client ssh sur windows 10 mais je n'arrive pas à me connecter à distance depuis des machines linux. Avez-vous des suggestion à me faire ?
Mon objectif est de permettre a des utilisateurs de machines linux d'accéder sur une machine windows pour récupérer des données au lieu de toujours utiliser des disque pour faire des copies .
Merci votre aide