Étapes détaillées : Créer et gérer des clés SSH pour l’authentification sur une machine virtuelle Linux dans Azure

S’applique à : ✔️ Machines virtuelles Linux ✔️ Groupes identiques flexibles

Avec une paire de clés SSH (Secure Shell), vous pouvez créer une machine virtuelle Linux qui utilise des clés SSH pour l’authentification. Cet article décrit comment créer et utiliser une paire de fichiers de clés publique-privée RSA SSH pour les connexions de client SSH.

Si vous souhaitez des commandes rapides plutôt qu’une explication plus approfondie des clés SSH, consultez Comment créer une paire de clés publique-privée SSH pour les machines virtuelles Linux dans Azure.

Pour créer des clés SSH et les utiliser pour se connecter à une machine virtuelle Linux à partir d’un ordinateur Windows, consultez Comment utiliser des clés SSH avec Windows sur Azure. Vous pouvez également utiliser le portail Azure pour créer et gérer des clés SSH pour la création de machines virtuelles dans le portail.

Vue d’ensemble de SSH et des clés

SSH est un protocole de connexion chiffré qui permet d’ouvrir des sessions sécurisées via des connexions non sécurisées. Bien que le protocole SSH offre une connexion chiffrée, l’utilisation de mots de passe avec des connexions SSH laisse néanmoins la machine virtuelle vulnérable aux attaques en force brute. Nous vous recommandons de vous connecter à une machine virtuelle via SSH à l’aide d’une paire de clés publique/privée, également appelées clés SSH.

  • La clé publique est placée sur votre machine virtuelle.

  • La clé privée reste sur votre système local. Protégez cette clé privée. Ne la partagez pas.

Quand vous utilisez un client SSH pour vous connecter à votre machine virtuelle (qui a la clé publique), la machine virtuelle distante teste le client pour vérifier qu’il a la bonne clé privée. Si le client a la clé privée, il est autorisé à accéder à la machine virtuelle.

Selon les stratégies de sécurité de votre organisation, vous pouvez réutiliser une paire de clés publique-privée unique pour accéder à plusieurs services et machines virtuelles Azure. Vous n’avez pas besoin d’une paire de clés distincte pour chaque machine virtuelle ou service auxquels vous souhaitez accéder.

Votre clé publique peut être partagée avec n’importe qui, mais vous seul (ou votre infrastructure de sécurité locale) devez avoir accès à votre clé privée.

Formats de clé SSH pris en charge

Azure prend en charge les paires de clés publiques-privées RSA du protocole SSH-2 ayant une longueur minimale de 2 048 bits. Les autres formats clés tels que ED25519 et ECDSA ne sont pas pris en charge.

Utilisation et avantages des clés SSH

Quand vous créez une machine virtuelle Azure en spécifiant la clé publique, Azure copie cette clé (au format .pub) dans le dossier ~/.ssh/authorized_keys sur la machine virtuelle. Les clés SSH dans ~/.ssh/authorized_keys garantissent que les clients se connectant disposent de la clé privée correspondante pendant une connexion SSH. Dans une machine virtuelle Linux Azure qui utilise des clés SSH pour l’authentification, Azure désactive le système d’authentification par mot de passe du serveur SSH et autorise uniquement l’authentification par clé SSH. En créant une machine virtuelle Linux Azure avec des clés SSH, vous sécurisez le déploiement de machines virtuelles et évitez l’étape de configuration post-déploiement classique qui consiste à désactiver les mots de passe dans le fichier sshd_config.

Si vous ne voulez pas utiliser de clés SSH, vous pouvez configurer votre machine virtuelle Linux pour utiliser une authentification par mot de passe. Si votre machine virtuelle n’est pas exposée à Internet, l’utilisation de mots de passe peut être suffisante. Toutefois, vous devez toujours gérer vos mots de passe pour chaque machine virtuelle Linux et maintenir des stratégies de mot de passe efficaces, par exemple, en spécifiant une longueur minimale de mot de passe et des mises à jour système régulières.

Générer des clés avec ssh-keygen

Pour créer les clés, la commande par défaut est ssh-keygen, disponible avec les utilitaires OpenSSH dans Azure Cloud Shell, un hôte macOS ou Linux, et Windows (10 et 11). ssh-keygen pose une série de questions, puis écrit une clé privée et la clé publique correspondante.

Par défaut, les clés SSH sont conservées dans le ~/.sshrépertoire. Si vous n’avez pas de répertoire ~/.ssh, la commande ssh-keygen en crée un pour vous avec les autorisations appropriées. Une clé SSH est créée en tant que ressource et stockée dans Azure pour une utilisation ultérieure.

Notes

Vous pouvez également créer des clés avec Azure CLI à l’aide de la commande az sshkey create, comme décrit dans Générer et stocker des clés SSH.

Exemple de base

La commande ssh-keygen suivante génère des fichiers de clés publique et privée SSH RSA 4096 bits par défaut dans le répertoire ~/.ssh. Si une paire de clés SSH existante est trouvée dans l’emplacement actuel, ces fichiers sont remplacés.

ssh-keygen -m PEM -t rsa -b 4096

Exemple détaillé

L’exemple suivant montre d’autres options de commande pour créer une paire de clés SSH RSA. Si une paire de clés SSH existe dans l’emplacement actuel, les fichiers sont remplacés.

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myprivatekey \
    -N mypassphrase

Explication des commandes

ssh-keygen = programme utilisé pour créer les clés

-m PEM = mettre en forme la clé au format PEM

-t rsa = Type de clé à créer, dans notre cas au format RSA

-b 4096 = Nombre de bits dans la clé, dans notre cas 4096

-C "azureuser@myserver" = commentaire ajouté à la fin du fichier de la clé publique pour l’identifier facilement. Une adresse e-mail est généralement utilisée en commentaire, mais vous pouvez utiliser ce qui convient le mieux à votre infrastructure.

-f ~/.ssh/mykeys/myprivatekey = Nom du fichier de clé privée, si vous choisissez de ne pas utiliser le nom par défaut. Le fichier de clé publique correspondant avec l’extension .pub est généré dans le même répertoire. Le répertoire doit exister.

-N mypassphrase = Phrase secrète supplémentaire utilisée pour accéder au fichier de clé privée.

Exemple de ssh-keygen

ssh-keygen -t rsa -m PEM -b 4096 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
|        .oE=*B*+ |
|          o+o.*++|
|           .oo++*|
|       .    .B+.O|
|        S   o=BO.|
|         . .o++o |
|        . ... .  |
|         ..  .   |
|           ..    |
+----[SHA256]-----+

Fichiers de clés enregistrés

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

Nom de la paire de clés dans cet article. Le nom par défaut de la paire de clés est id_rsa. Comme certains outils recherchent ce nom de fichier de clé privée id_rsa, il est utile de le conserver. Le répertoire ~/.ssh/ est l’emplacement par défaut des paires de clés SSH et du fichier de configuration SSH. Si aucun chemin d’accès complet n’est spécifié, ssh-keygen crée les clés dans le répertoire de travail actuel, et non dans le répertoire par défaut ~/.ssh.

Liste du répertoire ~/.ssh

Pour afficher les fichiers existants dans le répertoire ~/.ssh, exécutez la commande suivante. Si aucun fichier n’est trouvé dans le répertoire ou que le répertoire lui-même est manquant, assurez-vous que toutes les commandes précédentes ont été exécutées avec succès. Vous devrez peut-être modifier des fichiers dans ce répertoire sur certaines distributions Linux.

ls -al ~/.ssh
-rw------- 1 azureuser staff  1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff   410 Aug 25 18:04 id_rsa.pub

Phrase secrète de la clé

Enter passphrase (empty for no passphrase):

Nous vous recommandons vivement d’ajouter une phrase secrète à votre clé privée. Sans phrase secrète pour protéger le fichier de clé, toute personne ayant le fichier peut l’utiliser pour se connecter à un serveur contenant la clé publique correspondante. L’ajout d’une phrase secrète offre donc une protection supplémentaire si un utilisateur malveillant parvient à accéder à votre fichier de clé privée. Vous avez ainsi plus de temps pour changer les clés.

Générer les clés automatiquement pendant le déploiement

Si vous utilisez Azure CLI pour créer votre machine virtuelle, vous pouvez éventuellement générer des fichiers de clés SSH à la fois publiques et privées en exécutant la commande az vm create avec l’option --generate-ssh-keys. Les clés sont stockées dans le répertoire ~/.ssh. Notez que cette option de commande ne remplace pas les clés s’ils existent déjà à cet emplacement, par exemple avec certaines images de la galerie de calcul préconfigurées.

Fournir la clé publique SSH pendant le déploiement d’une machine virtuelle

Pour créer une machine virtuelle Linux qui utilise des clés SSH pour l’authentification, fournissez votre clé publique SSH à la création de la machine virtuelle à l’aide du portail Azure, de l’interface CLI, des modèles Resource Manager ou d’autres méthodes. Si vous utilisez le portail, vous entrez la clé publique elle-même. Si vous utilisez Azure CLI pour créer votre machine virtuelle avec une clé publique existante, spécifiez la valeur ou l’emplacement de cette clé publique en exécutant la commande az vm create avec l’option --ssh-key-value.

Si vous n’êtes pas familiarisé avec le format des clés publiques SSH, vous pouvez voir votre clé publique en exécutant cat comme suit, en remplaçant ~/.ssh/id_rsa.pub par l’emplacement de votre propre fichier de clé publique :

cat ~/.ssh/id_rsa.pub

La sortie est similaire à l’exemple suivant (exemple rédigé ci-dessous) :

ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver

Si vous copiez et collez le contenu du fichier de clé publique dans le portail Azure ou dans un modèle Resource Manager, ne copiez pas les espaces blancs supplémentaires et n’introduisez pas de sauts de ligne. Par exemple, si vous utilisez macOS, vous pouvez diriger le fichier de clé publique (par défaut, ~/.ssh/id_rsa.pub) sur pbcopy pour en copier le contenu (d’autres programmes Linux ont la même fonction, par exemple, xclip).

Si vous préférez utiliser une clé publique avec un format multiligne, vous pouvez générer une clé au format RFC4716 dans un conteneur « pem » à partir de la clé publique précédemment créée.

Pour créer une clé au format RFC4716 à partir d’une clé publique SSH existante, procédez comme suit :

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem

Établir une connexion SSH sur votre machine virtuelle avec un client SSH

Une fois la clé publique déployée sur votre machine virtuelle Azure et la clé privée sur votre système local, établissez une connexion SSH sur votre machine virtuelle à l’aide de l’adresse IP ou du nom DNS de votre machine virtuelle. Remplacez azureuser et myvm.westus.cloudapp.azure.com dans la commande suivante par le nom d’administrateur et le nom de domaine complet (ou adresse IP) :

ssh azureuser@myvm.westus.cloudapp.azure.com

Si vous avez fourni un mot de passe lorsque vous avez créé votre paire de clés, saisissez-le lorsque vous y êtes invité pendant le processus de connexion. (Le serveur est ajouté à votre dossier ~/.ssh/known_hosts et vous n’avez pas à vous connecter à nouveau tant que la clé publique sur votre machine virtuelle Azure n’est pas modifiée ou que le nom de serveur n’est pas supprimé du dossier ~/.ssh/known_hosts.)

Si la machine virtuelle utilise la stratégie juste-à-temps, vous devez demander à y accéder avant de pouvoir vous connecter à cette machine virtuelle. Pour plus d’informations sur la stratégie juste-à-temps, consultez Gérer l’accès à la machine virtuelle à l’aide de la stratégie juste-à-temps.

Utiliser ssh-agent pour stocker votre phrase secrète de clé privée

Pour éviter de taper la phrase secrète de votre fichier de clé privée à chaque connexion SSH, vous pouvez utiliser ssh-agent pour la mettre en cache sur votre système local. Si vous utilisez un Mac, le trousseau OSX stocke et sécurise la phrase secrète de clé privée quand vous appelez ssh-agent.

Vérifiez et utilisez ssh-agent et ssh-add pour indiquer au système SSH les fichiers de clés et ne pas avoir à utiliser la phrase secrète de manière interactive.

eval "$(ssh-agent -s)"

Ensuite, ajoutez la clé privée à ssh-agent à l’aide de la commande ssh-add.

ssh-add ~/.ssh/id_rsa

La phrase secrète de clé privée est maintenant stockée dans ssh-agent.

Utiliser ssh-copy-id pour copier la clé sur une machine virtuelle existante

Si vous avez déjà créé une machine virtuelle, vous pouvez ajouter une clé publique SSH à votre machine virtuelle Linux à l’aide de la commande ssh-copy-id.

ssh-copy-id -i ~/.ssh/id_rsa.pub azureuser@myserver

Créer et configurer un fichier de configuration SSH

Vous pouvez créer et configurer un fichier config SSH (~/.ssh/config) pour accélérer les connexions et optimiser le comportement de votre client SSH.

L’exemple suivant montre une configuration simple que vous pouvez utiliser pour vous connecter rapidement comme utilisateur sur une machine virtuelle spécifique à l’aide de la clé privée SSH par défaut.

Créez le fichier.

touch ~/.ssh/config

Modifier le fichier pour ajouter la nouvelle configuration SSH

vim ~/.ssh/config

Ajoutez les paramètres de configuration appropriés pour votre machine virtuelle hôte. Dans cet exemple, le nom de machine virtuelle (hôte) est myvm, le nom de compte (utilisateur) est azureuser et l’adresse IP ou le nom de domaine complet (nom d’hôte) est 192.168.0.255.

# Azure Keys
Host myvm
  Hostname 192.168.0.255
  User azureuser
# ./Azure Keys

Vous pouvez ajouter des configurations d’hôtes supplémentaires pour que chaque hôte utilise sa propre paire de clés dédiée. Consultez Fichier config SSH pour connaître d’autres options de configuration avancées.

Maintenant que vous avez une paire de clés SSH et un fichier de configuration SSH configuré, vous pouvez accéder à distance à votre machine virtuelle Linux rapidement et en toute sécurité. Quand vous exécutez la commande suivante, SSH localise et charge tous les paramètres du bloc Host myvm dans le fichier config SSH.

ssh myvm

La première fois que vous vous connectez à un serveur à l’aide d’une clé SSH, la commande vous invite à entrer la phrase secrète du fichier de clé.

Étapes suivantes

L’étape suivante consiste à créer des machines virtuelles Linux de Azure à l’aide de la nouvelle clé publique SSH. Les machines virtuelles Azure créées avec une clé publique SSH comme identifiant de connexion sont mieux sécurisées que celles créées avec la méthode de connexion par défaut (les mots de passe).