Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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. Lorsque vous travaillez sur plusieurs domaines, comme entre les systèmes locaux et hébergés dans le cloud, ce type d’authentification devient vulnérable aux intrusions par force brute.
Par comparaison, les environnements Linux utilisent généralement des paires de clés publiques/privées pour piloter l’authentification qui ne nécessite pas l’utilisation de mots de passe devinables. OpenSSH inclut des outils pour prendre en charge l’authentification basée sur des clés, en particulier :
- ssh-keygen pour générer des clés sécurisées.
- ssh-agent et ssh-add pour stocker en toute sécurité 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 des clés avec Secure Shell (SSH). Si vous ne connaissez pas la gestion des clés SSH, nous vous recommandons vivement de consulter le document NIST IR 7966, intitulé Sécurité de la gestion des accès interactif et automatisé à l’aide de Secure Shell (SSH).
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 clés , un privé et l’autre public. Chaque fichier de clé privée est l’équivalent d’un mot de passe et doit rester protégé dans toutes les 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 ce qui est placé sur le serveur SSH et peut être partagée sans compromettre la clé privée.
Le serveur SSH et le client peuvent utiliser l’authentification basée sur des clés pour comparer la clé publique d’un nom d’utilisateur fourni par rapport à 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 lorsque la paire de clés est générée. Pour plus d’informations, consultez Génération de clé utilisateur. L’utilisateur est invité à entrer la phrase secrète pendant l’authentification. La phrase secrète combinée à la présence de la clé privée est utilisée sur le client SSH pour authentifier l’utilisateur.
Important
Une session distante ouverte via l’authentification basée sur des clés n’a pas d’informations d’identification utilisateur associées. Par conséquent, la session n’est pas capable d’authentification sortante en tant qu’utilisateur. Ce comportement est voulu.
Génération d’une clé d’hôte
Les clés publiques ont des exigences de liste de contrôle d’accès (ACL) spécifiques qui, sur Windows, équivaut à autoriser uniquement l’accès aux administrateurs et à l’utilisateur système. La première fois que le sshd
service est utilisé, la paire de clés pour l’hôte est générée automatiquement.
Important
Vous devez installer OpenSSH Server avant de pouvoir exécuter les commandes de cet article. Pour plus d’informations, consultez Prise en main d’OpenSSH pour Windows.
Par défaut, vous devez démarrer sshd
manuellement. Pour le configurer pour démarrer automatiquement 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
# Start the sshd service.
Start-Service sshd
Étant donné qu’aucun utilisateur n’est associé au sshd
service, les clés hôtes 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. Vous pouvez utiliser ssh-keygen.exe
pour générer des fichiers clés et spécifier les algorithmes de génération de clés suivants :
- Algorithme de signature numérique (DSA)
- Rivest-Shamir-Adleman (RSA)
- Algorithme de signature numérique de courbe elliptique (ECDSA)
- Éd25519
Si vous ne spécifiez pas d’algorithme, Ed25519 est utilisé. Un algorithme et une longueur de clé forts doivent être utilisés, comme ECDSA dans cet exemple.
Pour générer des fichiers clés à l’aide de l’algorithme ECDSA, exécutez la commande suivante dans une fenêtre PowerShell ou Invite de commandes sur votre client :
ssh-keygen -t ecdsa
La sortie de la commande doit ressembler aux lignes suivantes, sauf qu’elle username
est remplacée par votre nom d’utilisateur :
Generating public/private ecdsa key pair.
Enter file in which to save the key (C:\Users\username/.ssh/id_ecdsa):
À l’invite, vous pouvez sélectionner Entrée pour accepter le chemin d’accès au fichier par défaut, ou vous pouvez spécifier un chemin d’accès ou un nom de fichier pour vos clés générées.
Ensuite, vous êtes invité à utiliser une phrase secrète pour chiffrer vos fichiers de clé privée. En général, nous vous déconseillons d’utiliser une phrase secrète vide, car la phrase secrète fonctionne avec le fichier clé pour fournir une authentification à deux facteurs. Mais pour cet exemple, vous pouvez laisser le mot de passe vide.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\username/.ssh/id_ecdsa.
Your public key has been saved in C:\Users\username/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:OIzc1yE7joL2Bzy8!gS0j8eGK7bYaH1FmF3sDuMeSj8 username@LOCAL-HOSTNAME
The key's randomart image is:
+--[ECDSA 256]--+
| . |
| o |
| . + + . |
| o B * = . |
| o= B S . |
| .=B O o |
| + =+% o |
| *oo.O.E |
|+.o+=o. . |
+----[SHA256]-----+
Vous disposez maintenant d’une paire de clés ECDSA publique/privée à l’emplacement spécifié. Le fichier .pub est la clé publique, et le fichier sans extension est la clé privée :
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/3/2021 2:55 PM 464 id_ecdsa
-a---- 6/3/2021 2:55 PM 103 id_ecdsa.pub
Un fichier de clé privée est l’équivalent d’un mot de passe et doit être protégé de la même façon que vous protégez votre mot de passe.
Vous pouvez utiliser ssh-agent
pour stocker en toute sécurité vos clés privées dans un contexte de sécurité Windows associé à votre compte Windows. Pour configurer le ssh-agent
service de manière à démarrer automatiquement chaque fois que votre ordinateur est redémarré et à utiliser ssh-add
pour stocker la clé privée, exécutez les commandes suivantes à une invite PowerShell avec élévation de privilèges sur votre serveur :
# By default, the ssh-agent service is disabled. Configure it to start automatically.
# Run the following command as an administrator.
Get-Service ssh-agent | Set-Service -StartupType Automatic
# Start the service.
Start-Service ssh-agent
# The following command should return a status of Running.
Get-Service ssh-agent
# Load your key files into ssh-agent.
ssh-add $env:USERPROFILE\.ssh\id_ecdsa
Après avoir ajouté la clé au ssh-agent
service sur votre client, le ssh-agent
service récupère automatiquement la clé privée locale et le transmet à votre client SSH.
Important
Nous vous recommandons 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 au ssh-agent
service. La clé privée ne peut pas être récupérée à partir de l’agent lorsqu’un algorithme fort est utilisé, tel qu’ECDSA dans cet exemple. Si vous perdez l’accès à la clé privée, vous devez créer une paire de clés et mettre à jour la clé publique sur tous les systèmes avec lesquels vous interagissez.
Déployer la clé publique
Pour utiliser la clé utilisateur que vous avez créée précédemment, vous devez placer le contenu de votre clé publique (\.ssh\id_ecdsa.pub) sur le serveur dans un fichier texte. Le nom et l’emplacement du fichier varient selon que le compte d’utilisateur est membre du groupe d’administrateurs local ou d’un compte d’utilisateur standard. Les sections suivantes couvrent les utilisateurs standard et administratifs.
Utilisateur standard
Vous devez placer le contenu de votre clé publique (\.ssh\id_ecdsa.pub) sur le serveur dans un fichier texte appelé authorized_keys
en C :\Users\username\.ssh\. Vous pouvez copier votre clé publique à l’aide de l’utilitaire de transfert de fichiers sécurisé OpenSSH scp
ou à l’aide de PowerShell pour écrire la clé dans le fichier.
Vous pouvez utiliser le code suivant pour copier la clé publique sur le serveur. Dans la dernière ligne, remplacez username
par votre nom d’utilisateur. Au départ, vous êtes invité à entrer un mot de passe pour le compte d’utilisateur du serveur.
# Get the public key file generated previously on your client.
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
# Generate the PowerShell command to run remotely that copies the public key file generated previously on your client to the authorized_keys file on your server.
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"
# Connect to your server and run the PowerShell command by using the $remotePowerShell variable.
ssh username@domain1@contoso.com $remotePowershell
Utilisateur administratif
Vous devez placer le contenu de votre clé publique (\.ssh\id_ecdsa.pub) sur le serveur dans un fichier texte appelé administrators_authorized_keys
en C :\ProgramData\ssh\. Vous pouvez copier votre clé publique à l’aide de l’utilitaire de transfert de fichiers sécurisé OpenSSH scp
ou à l’aide de PowerShell pour écrire la clé dans le fichier. La liste de contrôle d’accès sur ce fichier doit être configurée pour autoriser uniquement l’accès aux administrateurs et à l’utilisateur système.
Vous pouvez utiliser le code suivant pour copier la clé publique sur le serveur et configurer la liste de contrôle d’accès. Dans la dernière ligne, remplacez username
par votre nom d’utilisateur. Au départ, vous êtes invité à entrer un mot de passe pour le compte d’utilisateur du serveur.
Remarque
Cet exemple montre les étapes pour créer le fichier administrators_authorized_keys
. Ce fichier s’applique uniquement aux comptes d’administrateur. Vous devez l’utiliser au lieu du fichier spécifique à l’utilisateur à l’emplacement du profil de l’utilisateur.
# Get the public key file generated previously on your client.
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub
# Generate the PowerShell command to run remotely that copies the public key file generated previously on your client to the authorized_keys file on your server.
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '''$authorizedKey''';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F"""
# Connect to your server and run the PowerShell command by using the $remotePowerShell variable.
ssh username@domain1@contoso.com $remotePowershell
Pour les versions non localisées anglaises du système d’exploitation, le script doit être modifié pour refléter les noms de groupes en conséquence. Pour éviter les erreurs qui peuvent se produire lorsque vous accordez des autorisations aux noms de groupe, vous pouvez utiliser l’identificateur de sécurité (SID) à la place du nom du groupe. Vous pouvez récupérer le SID en exécutant Get-LocalGroup | Select-Object Name, SID
. Lorsque vous utilisez le SID à la place du nom du groupe, il doit être précédé d’un astérisque (*). Dans l'exemple suivant, le groupe Administrateurs utilise le SID suivant S-1-5-32-544
:
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '''$authorizedKey''';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""*S-1-5-32-544:F"" /grant ""SYSTEM:F"""
Ces étapes terminent la configuration requise pour utiliser l’authentification basée sur clé avec OpenSSH sur Windows.
Après avoir exécuté ces commandes PowerShell, vous pouvez vous connecter à l’hôte sshd
à partir de n’importe quel client disposant de la clé privée.