Gestion des clés OpenSSH

S’applique à : Windows Server 2019, Windows 10, Windows Server 2022

La plupart des authentifications dans les environnements Windows se font avec une paire nom d’utilisateur/mot de passe, ce qui fonctionne bien pour les systèmes qui partagent un domaine commun. Si vous travaillez sur plusieurs domaines, par exemple sur un système local et un système hébergé dans le cloud, ceux-ci deviennent vulnérables aux intrusions par force brute.

À titre de comparaison, les environnements Linux utilisent généralement des paires de clés publiques/privées pour gérer une authentification qui ne demande pas d’utiliser des mots de passe pouvant être devinés. OpenSSH intègre des outils permettant de faciliter la prise en charge de ce service, notamment :

  • ssh-keygen pour la génération de clés sécurisées
  • ssh-agent et ssh-add pour le stockage sécurisé des clés privées
  • scp et sftp pour copier en toute sécurité des fichiers de clé publique lors de l’utilisation initiale d’un serveur

Ce document fournit une vue d’ensemble de l’utilisation de ces outils sur Windows pour commencer à utiliser l’authentification basée sur clé avec SSH. Si vous n’êtes pas familier avec la gestion des clés SSH, nous vous recommandons vivement de consulter le document NIST IR 7966 intitulé « Security of Interactive and Automated Access Management Using Secure Shell (SSH) ».

À propos des paires de clés

Les paires de clés font référence aux fichiers de clé publique et privée utilisés par certains protocoles d’authentification.

L’authentification par clé publique SSH utilise des algorithmes de chiffrement asymétriques pour générer deux fichiers de clé : un « privé » et l’autre « public ». Les fichiers de clé privée sont l’équivalent d’un mot de passe et doivent demeurer protégés en toutes circonstances. Si quelqu’un détient votre clé privée, il peut se connecter en votre nom à n’importe quel serveur SSH auquel vous avez accès. La clé publique est placée sur le serveur SSH et peut être partagée sans compromettre la clé privée.

Lorsque vous utilisez l’authentification par clé avec un serveur SSH, le serveur et le client SSH comparent la clé publique d’un nom d’utilisateur fourni avec la clé privée. Si la clé publique côté serveur ne peut pas être validée par rapport à la clé privée côté client, l’authentification échoue.

L’authentification multifacteur peut être implémentée avec des paires de clés en entrant une phrase secrète quand la paire de clés est générée (voir Génération d’une clé utilisateur ci-dessous). Pendant l’authentification, l’utilisateur est invité à entrer la phrase secrète, qui est utilisée en plus de la clé privée sur le client SSH pour authentifier l’utilisateur.

Génération d’une clé d’hôte

Les clés publiques ont des exigences de liste de contrôle d’accès spécifiques qui, sur Windows, équivalent à ne permettre l’accès qu’aux administrateurs et au système. Lors de la première utilisation de sshd, la paire de clés de l’hôte sera générée automatiquement.

Important

OpenSSH Server doit être installé en premier. Consultez Bien démarrer avec OpenSSH.

Par défaut, le service sshd est défini pour démarrer manuellement. Pour le démarrer chaque fois que le serveur est redémarré, exécutez les commandes suivantes à partir d’une invite PowerShell avec élévation de privilèges sur votre serveur :

# Set the sshd service to be started automatically
Get-Service -Name sshd | Set-Service -StartupType Automatic

# Now start the sshd service
Start-Service sshd

Étant donné qu’aucun utilisateur n’est associé au service sshd, les clés de l’hôte sont stockées sous C:\ProgramData\ssh.

Génération d’une clé utilisateur

Pour utiliser l’authentification par clé, vous devez d’abord générer des paires de clés publiques/privées pour votre client. ssh-keygen.exe est utilisé pour générer des fichiers de clés et les algorithmes DSA, RSA, ECDSA ou Ed25519 peuvent être spécifiés. Si aucun algorithme n’est spécifié, RSA est utilisé. Un algorithme et une longueur de clé forts doivent être utilisés, comme Ed25519 dans cet exemple.

Pour générer des fichiers de clé avec l’algorithme Ed25519, exécutez la commande suivante à partir d’une invite PowerShell ou cmd sur votre client :

ssh-keygen -t ed25519

Ceci devrait afficher ce qui suit (où « username » est remplacé par votre nom d’utilisateur) :

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\username\.ssh\id_ed25519):

Vous pouvez appuyer sur Entrée pour accepter la valeur par défaut ou indiquer un chemin et/ou un nom de fichier où vous aimeriez que vos clés soient générées. À ce stade, vous serez invité à utiliser une phrase secrète pour chiffrer vos fichiers de clé privée. Vous pouvez laisser vide, mais ce n’est pas recommandé. La phrase secrète fonctionne avec le fichier de clé pour fournir une authentification à deux facteurs. Pour cet exemple, nous laissons la phrase secrète vide.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username\.ssh\id_ed25519.
Your public key has been saved in C:\Users\username\.ssh\id_ed25519.pub.
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@server@LOCAL-HOSTNAME

The key's randomart image is:
+--[ED25519 256]--+
|        .        |
|         o       |
|    . + + .      |
|   o B * = .     |
|   o= B S .      |
|   .=B O o       |
|  + =+% o        |
| *oo.O.E         |
|+.o+=o. .        |
+----[SHA256]-----+

Vous avez maintenant une paire de clés publique/privée Ed25519 à l’emplacement spécifié. Les fichiers .pub sont des clés publiques, tandis que les fichiers sans extension sont des clés privées :

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         6/3/2021   2:55 PM            464 ed25519
-a----         6/3/2021   2:55 PM            103 ed25519.pub

Rappelez-vous que les fichiers de clés privées sont l’équivalent d’un mot de passe et que vous devez les protéger de la même manière que votre mot de passe. Pour vous aider, utilisez ssh-agent pour stocker en toute sécurité les clés privées dans un contexte de sécurité Windows associé à votre connexion Windows. Pour ce faire, démarrez le service ssh-agent en tant qu’administrateur et utilisez ssh-add pour stocker la clé privée.

# By default the ssh-agent service is disabled. Allow it to be manually started for the next step to work.
# Make sure you're running as an Administrator.
Get-Service ssh-agent | Set-Service -StartupType Manual

# Start the service
Start-Service ssh-agent

# This should return a status of Running
Get-Service ssh-agent

# Now load your key files into ssh-agent
ssh-add ~\.ssh\id_ed25519

Après avoir terminé ces étapes, chaque fois qu’une clé privée est nécessaire pour l’authentification de ce client, ssh-agent va automatiquement récupérer la clé privée locale et la transmettre à votre client SSH.

Important

Il est fortement recommandé de sauvegarder votre clé privée dans un emplacement sécurisé, puis de la supprimer du système local après l’avoir ajoutée à ssh-agent. La clé privée ne peut pas être récupérée auprès de l’agent si un algorithme fort a été utilisé, tel que Ed25519 dans cet exemple. Si vous perdez l’accès à la clé privée, vous devrez créer une nouvelle paire de clés et mettre à jour la clé publique sur tous les systèmes avec lesquels vous interagissez.

Déploiement de la clé publique

Pour utiliser la clé utilisateur créée ci-dessus, le contenu de votre clé publique (~\.ssh\id_ed25519.pub) doit être placé sur le serveur dans un fichier texte, dont le nom et l’emplacement varient selon que le compte d’utilisateur est membre du groupe Administrateurs local ou d’un compte d’utilisateur standard.

Utilisateur standard

Le contenu de votre clé publique (~\.ssh\id_ed25519.pub) doit être placé sur le serveur dans un fichier texte appelé authorized_keys dans C:\Users\username\.ssh\. Le client OpenSSH comprend scp, utilitaire de transfert de fichiers sécurisé conçu pour aider à faire cela.

L’exemple ci-dessous copie la clé publique sur le serveur (où « username » est remplacé par votre nom d’utilisateur). Vous devrez utiliser le mot de passe du compte d’utilisateur pour le serveur au départ.

# Make sure that the .ssh directory exists in your server's user account home folder
ssh username@domain1@contoso.com mkdir C:\Users\username\.ssh\

# Use scp to copy the public key file generated previously on your client to the authorized_keys file on your server
scp C:\Users\username\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\Users\username\.ssh\authorized_keys

Utilisateur administratif

Le contenu de votre clé publique (~\.ssh\id_ed25519.pub) doit être placé sur le serveur dans un fichier texte appelé administrators_authorized_keys dans C:\ProgramData\ssh\. Le client OpenSSH comprend scp, utilitaire de transfert de fichiers sécurisé conçu pour aider à faire cela. La liste de contrôle d’accès de ce fichier doit être configurée pour autoriser uniquement l’accès aux administrateurs et au système.

L’exemple ci-dessous copie la clé publique sur le serveur et configure la liste de contrôle d’accès (où « username » est remplacé par votre nom d’utilisateur). Vous devrez utiliser le mot de passe du compte d’utilisateur pour le serveur au départ.

Notes

Cet exemple montre les étapes pour créer administrators_authorized_keys file. S’il est exécuté plusieurs fois, il remplace ce fichier à chaque fois. Pour ajouter la clé publique pour plusieurs utilisateurs administratifs, vous devez ajouter ce fichier à chaque clé publique.

# Make sure that the .ssh directory exists in your server's user account home folder
ssh user1@domain1@contoso.com mkdir C:\ProgramData\ssh\

# Use scp to copy the public key file generated previously on your client to the authorized_keys file on your server
scp C:\Users\username\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\ProgramData\ssh\administrators_authorized_keys

# Appropriately ACL the authorized_keys file on your server
ssh --% user1@domain1@contoso.com icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

Ces étapes terminent la configuration requise pour utiliser l’authentification basée sur clé avec OpenSSH sur Windows. L’utilisateur peut ensuite se connecter à l’hôte sshd à partir de n’importe quel client disposant de la clé privée.