Le protocole Secure Shell (SSH) et le projet OpenSSH existent depuis des décennies sur Linux. Cependant, OpenSSH sur Windows n’a été adopté que récemment dans le monde Windows. Par conséquent, un serveur Windows n’est généralement pas pré-installé et prêt à l’emploi, et nécessite une configuration.
Dans ce tutoriel, vous apprendrez comment accéder en SSH à votre serveur Windows aussi facilement que sur Linux. Vous apprendrez comment installer (ou mettre à jour) OpenSSH sur Windows, ajouter les règles de pare-feu appropriées, et configurer l’authentification par clé publique, mot de passe et certificat.
Prérequis
Pour suivre efficacement les exemples et démonstrations de cet article, vous devez répondre aux exigences suivantes.
- A Windows Server machine – This article will use Windows Server 2019 Datacenter. The server this tutorial will use will have a user account called june and will connect to the server at the IP address of 40.117.77.227 with a hostname of ataWindows.
- A local computer with PowerShell 7.1 installed. PowerShell 7.1 is available in Windows, Linux, and macOS. The examples in this article use PowerShell 7.1 in Windows 10.
Téléchargement d’OpenSSH
Contrairement aux serveurs Linux, les serveurs Windows ne disposent pas nativement d’un serveur SSH en cours d’exécution. Mais Microsoft a publié un portage open-source d’OpenSSH pour Windows. Avec cette version, vous pouvez maintenant configurer un serveur SSH sur une machine Windows.
Pour commencer, vous devez d’abord télécharger OpenSSH. Pour ce faire, suivez les étapes ci-dessous:
- Connectez-vous au bureau d’un serveur Windows en utilisant Remote Desktop (RDP) ou votre client de gestion de bureau préféré.
2. Sur votre bureau Windows Server, ouvrez une console Windows PowerShell avec élévation de privilèges.
3. Ensuite, copiez le code ci-dessous, collez-le dans la fenêtre PowerShell, et appuyez sur Entrée. Ce script téléchargera la dernière version d’OpenSSH, qui, au moment de la rédaction, est la version v8.1.0.0p1-Beta, dans le répertoire de travail actuel.
Si vous préférez enregistrer le code PowerShell pour télécharger OpenSSH, vous pouvez également ouvrir un éditeur de code tel que Windows PowerShell ISE ou Visual Studio Code et l’enregistrer là-bas.
4. Le fichier OpenSSH-Win64.zip devrait maintenant être dans votre répertoire de travail actuel. Vérifiez cela en exécutant la commande ci-dessous.
Comme vous pouvez le voir ci-dessous, le fichier OpenSSH-Win64.zip existe dans le répertoire.

Installation d’OpenSSH
Après avoir téléchargé OpenSSH-Win64.zip, la prochaine étape consiste à installer OpenSSH sur le serveur. Il n’y a pas de programme d’installation, au cas où vous vous y attendiez.
- Pendant que vous êtes toujours dans la même session PowerShell, copiez le code ci-dessous et exécutez-le dans PowerShell. Ce code extrait le contenu du fichier OpenSSH-Win64.zip vers C:\Program Files\OpenSSH.
2. Après avoir extrait le fichier ZIP, exécutez la commande ci-dessous dans PowerShell pour exécuter le script C:\Program Files\OpenSSH\install-sshd.ps1. Ce script installe le service Serveur SSH OpenSSH (sshd) et le service Agent d’authentification OpenSSH (sshd-agent).
Vous pouvez voir le résultat attendu ci-dessous.

Pour vous assurer que le serveur SSH démarre automatiquement, exécutez la commande ci-dessous dans PowerShell.
Ajout d’une règle de pare-feu Windows pour autoriser le trafic SSH
Cette procédure s’applique uniquement si votre serveur Windows utilise le Pare-feu Windows. Pour les serveurs utilisant des pare-feu tiers, consultez la documentation de votre pare-feu sur la manière d’autoriser le port 22.
Installation d’OpenSSH ne crée pas automatiquement une règle d’exception de pare-feu pour autoriser le trafic SSH. Par conséquent, votre prochaine tâche est de créer manuellement la règle de pare-feu.
L’une des façons les plus simples de créer une nouvelle règle de pare-feu Windows est d’utiliser PowerShell et la cmdlet New-NetFirewallRule
. La commande ci-dessous crée une règle de pare-feu appelée Allow SSH qui autorise tout le trafic TCP entrant destiné au port 22.
Copiez la commande ci-dessous et exécutez-la dans PowerShell.
La capture d’écran ci-dessous montre la sortie attendue dans PowerShell après la création de la règle de pare-feu.

Connexion avec SSH en utilisant l’authentification par mot de passe
À ce stade, vous avez installé OpenSSH sur Windows et effectué la configuration initiale du serveur. La prochaine étape consiste à tester si la connexion via SSH fonctionne réellement.
Pour tester votre serveur SSH nouvellement configuré, exécutez maintenant la commande ssh
sur votre ordinateur local.
Les mêmes étapes de cette section s’appliquent également lors de la connexion à un serveur SSH Linux.
1. Depuis votre ordinateur local cette fois, ouvrez PowerShell.
2. Ensuite, exécutez la commande ci-dessous pour démarrer le processus de connexion SSH. Assurez-vous de changer le nom d’utilisateur et l’hôte distant de votre serveur Windows.
3. Depuis que vous vous connectez pour la première fois au serveur, vous verrez un message vous indiquant que l’authenticité de l’hôte ne peut être établie. Cela signifie que votre ordinateur ne reconnaît pas encore l’hôte distant. Tapez yes et appuyez sur Entrée pour continuer.
4. Lorsqu’on vous demande le mot de passe, saisissez le mot de passe de votre compte et appuyez sur Entrée.

5. Après vous être connecté, comme vous pouvez le voir dans la capture d’écran ci-dessous, vous arriverez à l’invite de commande de l’hôte distant. Supposons que vous vouliez confirmer que vous êtes bien entré dans la session sur l’hôte distant. Pour ce faire, tapez hostname
et appuyez sur Entrée. La commande devrait renvoyer le nom de l’ordinateur distant.

Changer le shell par défaut pour OpenSSH en PowerShell
Lorsque vous vous connectez pour la première fois à votre serveur SSH Windows, vous remarquerez que le shell ou interpréteur de commandes par défaut est CMD. Avoir CMD comme shell SSH par défaut est bien, mais si vous préférez utiliser PowerShell comme shell par défaut, suivez ces étapes.
Pour changer le shell OpenSSH par défaut de CMD à PowerShell :
Tout d’abord, ouvrez une fenêtre PowerShell élevée sur votre serveur Windows, si vous n’en avez pas déjà une ouverte.
Ensuite, créez une nouvelle valeur de chaîne de registre appelée DefaultShell dans la clé de registre HKLM:\SOFTWARE\OpenSSH. Définissez les données de la chaîne DefaultShell sur le chemin de Windows PowerShell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
La capture d’écran ci-dessous montre le résultat attendu de la commande.

Configuration de l’authentification par clé publique
Dans les sections précédentes, vous vous êtes connecté avec un nom d’utilisateur et un mot de passe. Cela fonctionne, mais une manière plus sécurisée de s’authentifier avec un serveur SSH consiste à utiliser une paire de clés.
En résumé, une paire de clés se compose de deux clés appelées la clé publique et la clé privée, qui constituent un ensemble de justificatifs de sécurité pour prouver votre identité.
La clé publique est stockée sur le serveur, tandis que la clé privée reste sur l’ordinateur local. Vous devez traiter une clé privée comme votre mot de passe. Si la clé privée est compromise, n’importe qui peut l’utiliser pour accéder à votre serveur SSH.
Préparation du fichier administrators_authorized_keys
Les clés publiques doivent être sur le serveur. Mais où? Pour OpenSSH sur Windows, le serveur SSH lit les clés publiques depuis le fichier C:\ProgramData\ssh\administrators_authorized_keys. Mais ce fichier n’existe pas par défaut. Vous devez d’abord en créer un.
Suivez ces étapes ci-dessous pour créer le fichier administrators_authorized_keys et définir sa liste de contrôle d’accès (ACL) appropriée.
Sur le serveur Windows :
1. Ouvrez une console Windows PowerShell élevée si ce n’est pas déjà fait.
2. Copiez la commande ci-dessous et exécutez-la dans PowerShell. Cette commande crée le fichier administrators_authorized_keys en utilisant la New-Item
cmdlet.
Vous devriez voir un résultat similaire à la capture d’écran ci-dessous.

3. Ensuite, obtenez la liste de contrôle d’accès actuellement attribuée au fichier ssh_host_dsa_key et copiez cette ACL dans le fichier administrators_authorized_keys. Pour ce faire, exécutez la commande suivante.
Le service OpenSSH exige que seul le groupe Administrateurs et le compte SYSTEM aient accès au fichier administrators_authorized_keys. Et copier l’ACL de ssh_host_dsa_key vers administrators_authorized_keys est logique car l’ACL est déjà configurée.
4. Ouvrez l’Explorateur Windows.
5. Accédez au dossier C:\ProgramData\ssh\.
6. Cliquez avec le bouton droit sur le fichier administrators_authorized_keys et cliquez sur Propriétés.
7. Sur la page des propriétés, cliquez sur l’onglet Sécurité et cliquez sur Avancé.

8. Ensuite, vérifiez si les autorisations sont comme indiqué dans l’image ci-dessous.

Générer une nouvelle paire de clés SSH
Pour générer une nouvelle paire de clés SSH, utilisez la commande ssh-keygen
, qui fait partie des outils clients OpenSSH intégrés à Windows 10 (et versions ultérieures) et à la plupart des systèmes d’exploitation Linux.
L’exemple présenté dans cette section fonctionne à la fois sur les ordinateurs Windows et Linux.
Sur votre ordinateur local, dans une console PowerShell :
1. Accédez au répertoire .ssh de votre dossier personnel en exécutant la commande ci-dessous.
2. Ensuite, tapez la commande ssh-keygen
et appuyez sur Entrée. Lorsqu’on vous demande de saisir un emplacement de fichier pour enregistrer la clé que vous êtes en train de générer, gardez l’emplacement par défaut et appuyez sur Entrée. Ce faisant, permet à votre client SSH de trouver vos clés SSH lors de l’authentification automatique.
Sous Windows, le fichier clé par défaut est C:\Users\<nom_utilisateur>\.ssh\id_rsa.
3. À la prochaine invite, laissez le mot de passe vide. À ce stade, vous n’avez pas besoin d’utiliser un mot de passe pour les tests.
Ajouter un mot de passe à votre clé privée augmente significativement sa sécurité. Un mot de passe agit comme une authentification à deux facteurs (2FA) pour votre clé privée.
Vous remarquerez que la commande a créé deux fichiers : id_rsa (clé privée) et id_rsa.pub (clé publique).

Déploiement de la clé publique sur le serveur SSH Windows
Maintenant que vous avez généré votre paire de clés privée-publique, votre prochaine étape consiste à copier la clé publique dans le fichier C:\ProgramData\ssh\administrators_authorized_keys sur le serveur SSH.
Sur votre ordinateur local, dans une console PowerShell :
1. Copiez le code ci-dessous et exécutez-le dans PowerShell. Assurez-vous de changer d’abord le nom d’utilisateur et l’adresse IP. Vous pouvez vous référer au commentaire au-dessus de chaque commande pour savoir ce que chaque commande fait.
2. Entrez votre mot de passe lorsqu’on vous le demande, et ssh procédera à la copie de la clé publique. Vous verrez un résultat similaire, comme indiqué ci-dessous.

Connexion avec SSH en utilisant l’authentification par clé publique
Maintenant que vous avez copié votre clé publique sur votre serveur SSH, vous n’avez plus besoin d’utiliser un mot de passe pour vous authentifier. Comme vous pouvez le voir ci-dessous, ssh n’a pas demandé de mot de passe.

Configuration de l’authentification par certificat
Tout comme l’authentification par clé publique, l’authentification par certificat est sans mot de passe ou protégée par une phrase secrète. Pour activer la connexion par certificat, suivez la même procédure de génération de paire de clés sans déployer la clé publique sur le serveur SSH.
Vous n’avez pas besoin de mapper la clé publique aux fichiers authorized_keys ou administrators_authorized_keys sur le serveur SSH. Au lieu de cela, la clé publique est signée à l’aide d’une autorité de certification (CA).
Création de la clé d’autorité de certification (CA)
Générer les clés CA pour la signature est similaire à la génération d’une paire de clés utilisateur que vous avez faite précédemment dans cet article. Mais cette fois, vous devrez spécifier un nom de fichier pour les nouvelles clés CA. Pour ce faire, sur votre serveur Windows dans une console PowerShell :
Exécutez la commande ssh-keygen
comme indiqué ci-dessous. Cette commande crée la clé CA dans C:\ProgramData\ssh\ca_userkeys, mais n’hésitez pas à utiliser un nom de fichier différent. L’utilisation d’un nom de fichier différent n’affectera pas la fonctionnalité de la clé CA.
Lorsqu’on vous demande une phrase secrète, laissez la phrase secrète vide et appuyez sur Entrée.
Vous pouvez voir ci-dessous que la commande a créé deux fichiers. ca_userkeys, qui est la clé privée, et ca_userkeys.pub, qui est la clé publique.

Maintenant que vous avez généré les clés CA, indiquez au serveur SSH de faire confiance à la CA et où trouver la clé CA. Pour ce faire, ajoutez une nouvelle ligne TrustedUserCAKeys chemin/vers/ca_userkeys.pub
au fichier C:\ProgramData\ssh\sshd_config sur le serveur.
Exécutez les commandes ci-dessous pour ajouter l’élément de configuration dans le fichier sshd_config.
Signature de la clé publique de l’utilisateur
À ce stade, vous avez généré les clés CA et configuré le serveur SSH pour faire confiance au fichier de clé publique CA. Il ne reste plus qu’à signer la clé publique de votre utilisateur.
Sur votre ordinateur local, dans une console PowerShell:
1. Copiez le fichier id_rsa.pub
sur votre lecteur personnel sur le serveur SSH en utilisant la commande SCP. Assurez-vous de changer le nom d’utilisateur et l’adresse IP par les valeurs correctes.
2. Connectez-vous à votre serveur Windows en utilisant ssh. Une fois connecté, exécutez ssh-keygen
pour signer la clé publique de l’utilisateur. Vous remarquerez que la commande ci-dessous utilise plusieurs paramètres. Analysons-les.
-s C:\ProgramData\ssh\ca_userkeys
– spécifie l’emplacement de la clé CA pour signer la clé publique. Dans cet exemple, la clé CA est celle que vous avez générée.-I id_username
– spécifie l’ID que vous souhaitez attribuer à la clé publique de l’utilisateur signée. Changez la valeur deid_username
par le nom que vous souhaitez.-V +4w
– ce paramètre spécifie la période de validité de la clé signée. Dans cet exemple,+4w
signifie que la clé de l’utilisateur signée sera valide pendant quatre semaines. Vous pouvez modifier cette valeur selon votre préférence.-n username
– il s’agit du nom d’utilisateur auquel appartiendra la clé publique signée.<chemin vers id_rsa.pub>
– c’est l’emplacement de la clé publique de l’utilisateur à signer (Windows).
Après avoir exécuté la commande dans votre session SSH, vous devriez obtenir une sortie similaire, comme indiqué ci-dessous. Comme vous pouvez le voir, la commande a généré un nouveau fichier appelé id_rsa-cert.pub, qui est le certificat utilisateur signé.

3. Maintenant, revenez à votre session PowerShell sur votre ordinateur local et copiez le fichier id_rsa-cert.pub depuis le serveur vers votre ordinateur local. Modifiez d’abord le nom d’utilisateur et l’adresse IP par les valeurs correctes avant d’exécuter la commande.
Une fois la copie terminée, vous trouverez le certificat utilisateur signé dans votre dossier personnel, comme indiqué ci-dessous.

Connexion avec SSH en utilisant l’authentification par certificat.
Vous avez configuré l’authentification par certificat, et maintenant vous avez votre certificat utilisateur. Vous devriez maintenant tester si vous pouvez vous connecter au serveur SSH avec l’authentification par certificat.
La commande pour vous connecter à SSH avec un certificat est la même que celle utilisée avec un mot de passe ou une clé publique. Cependant, si vous avez précédemment activé l’authentification par clé publique, désactivez-la d’abord. Sinon, ssh continuera à utiliser votre paire de clés au lieu de votre certificat.
Pour désactiver votre paire de clés, supprimez votre clé publique du fichier administrators_authorized_keys. Pour ce faire, suivez ces étapes.
Notez que les commandes suivantes videront entièrement le fichier administrators_authorized_keys, supprimant ainsi toutes les clés publiques associées. Si vous ne souhaitez pas effacer toutes les clés publiques associées, utilisez un éditeur de texte pour supprimer manuellement les clés publiques sélectionnées de chaque fichier.
Lorsque vous êtes connecté via SSH sur le serveur Windows :
1. Exécutez le code suivant dans PowerShell pour vider le fichier administrators_authorized_keys.
2. À ce stade, les fichiers authorized_keys et administrators_authorized_keys sont vides, comme vous pouvez le voir dans la capture d’écran ci-dessous.

3. Tapez exit
et appuyez sur Entrée pour vous déconnecter de votre session SSH. Vous reviendrez à votre session PowerShell.
4. Après avoir supprimé les clés publiques, votre prochaine tentative de connexion ssh utilisera l’authentification par certificat. L’expérience de connexion sera la même que pour l’authentification par clé publique.

Conclusion
Vous avez maintenant configuré un serveur Windows OpenSSH à partir de zéro, jusqu’à explorer et configurer divers moyens d’authentification. Vous pouvez désormais vous connecter à vos serveurs Windows exactement comme vous le feriez avec Linux !