Comprendre l'authentification par clé SSH : Clés publiques vs clés privées expliquées

Découvrez les secrets de l'authentification par clé SSH avec ce guide complet. Apprenez les rôles fondamentaux des clés publiques et privées, comment elles fonctionnent ensemble pour sécuriser vos connexions à distance, et pourquoi cette méthode surpasse largement les connexions basées sur mot de passe. Cet article fournit des instructions étape par étape pour générer et déployer des clés, ainsi que les avantages essentiels en matière de sécurité et les meilleures pratiques. Améliorez la sécurité de votre serveur et simplifiez l'accès avec les clés SSH.

34 vues

Comprendre l'authentification par clé SSH : Explication des clés publiques et privées

SSH (Secure Shell) est l'épine dorsale de l'accès distant sécurisé aux serveurs, permettant aux administrateurs et aux développeurs de gérer les systèmes depuis n'importe où. Bien que l'authentification par mot de passe soit une méthode courante, elle présente souvent des vulnérabilités de sécurité. L'alternative préférée dans l'industrie et nettement plus sûre est l'authentification par clé SSH.

Cet article vise à démystifier l'authentification par clé SSH en expliquant clairement les rôles fondamentaux des clés publiques et privées. Nous examinerons comment ces homologues cryptographiques collaborent pour sécuriser vos connexions à distance, offrant une défense robuste contre les accès non autorisés. À la fin, vous comprendrez pourquoi cette méthode est non seulement plus sécurisée que les connexions traditionnelles par mot de passe, mais aussi plus pratique pour l'utilisation quotidienne.

Le problème avec les mots de passe

L'authentification traditionnelle par mot de passe repose sur un secret partagé : le mot de passe. Bien que les mots de passe forts puissent offrir un niveau de sécurité décent, ils sont sensibles à plusieurs faiblesses :

  • Attaques par force brute : Les attaquants peuvent essayer d'innombrables combinaisons de mots de passe jusqu'à ce qu'ils devinent correctement.
  • Attaques par dictionnaire : En utilisant des mots ou des phrases courants, les attaquants peuvent rapidement compromettre des comptes.
  • Enregistreurs de frappe (Keyloggers) : Les logiciels malveillants peuvent capturer les frappes au clavier, révélant les mots de passe.
  • Hameçonnage (Phishing) : Les tactiques d'ingénierie sociale peuvent amener les utilisateurs à divulguer leurs identifiants.
  • Erreur humaine : Les utilisateurs choisissent souvent des mots de passe faibles, faciles à deviner ou réutilisés, et peuvent les exposer accidentellement.

L'authentification par clé SSH atténue ces risques en supprimant la nécessité de transmettre un secret sur le réseau, ce qui en fait un choix supérieur pour sécuriser votre infrastructure distante.

Authentification par clé SSH : Un aperçu

L'authentification par clé SSH exploite la cryptographie asymétrique, un système qui utilise une paire de clés mathématiquement liées : une clé publique et une clé privée. Contrairement à la cryptographie symétrique, où la même clé est utilisée à la fois pour le chiffrement et le déchiffrement, la cryptographie asymétrique utilise une clé pour le chiffrement et une clé différente, mais connexe, pour le déchiffrement.

Lorsque vous tentez de vous connecter à un serveur SSH en utilisant des clés, le serveur lance un défi à votre client, et votre client prouve son identité en utilisant sa clé privée sans jamais envoyer la clé privée elle-même sur le réseau. Ce processus garantit que seuls les clients possédant la clé privée correcte peuvent établir une connexion avec les serveurs configurés pour faire confiance à la clé publique correspondante.

Le duo cryptographique : Clés publique et privée

Le cœur de l'authentification par clé SSH réside dans ces deux composantes distinctes, mais interconnectées.

La clé privée

La clé privée est votre identité secrète. C'est une longue chaîne de caractères complexe qui doit être maintenue absolument confidentielle et ne jamais être partagée avec qui que ce soit. Considérez-la comme la clé unique de votre coffre-fort numérique.

  • Critique pour la sécurité : Si votre clé privée est compromise, un attaquant pourrait vous usurper votre identité et obtenir un accès non autorisé à tout serveur où la clé publique correspondante a été déployée.
  • Emplacement : Généralement stockée sur votre machine locale (par exemple, %s, %s).
  • Protection : Elle est souvent protégée par une phrase de passe, ajoutant une couche de sécurité supplémentaire. Même si un attaquant accède à votre fichier de clé privée, il ne peut pas l'utiliser sans la phrase de passe.

La clé publique

La clé publique est le pendant de votre clé privée. Elle est dérivée de votre clé privée mais ne peut pas être utilisée pour recréer la clé privée. Comme son nom l'indique, la clé publique est destinée à être partagée et placée sur tout serveur auquel vous souhaitez accéder.

  • Partageable : Vous pouvez distribuer votre clé publique en toute sécurité à n'importe qui ou sur n'importe quel serveur sans compromettre votre sécurité.
  • Emplacement : Sur le serveur, les clés publiques sont généralement stockées dans le fichier %s pour chaque compte utilisateur. Chaque ligne de ce fichier représente une clé publique approuvée.
  • Rôle : La clé publique agit comme une empreinte digitale numérique. Lorsque vous tentez de vous connecter, le serveur utilise votre clé publique pour vérifier que vous possédez la clé privée correspondante sans jamais voir la clé privée elle-même.

Comment fonctionne l'authentification par clé SSH : La poignée de main (Handshake)

Décortiquons le processus étape par étape pour établir une connexion sécurisée via l'authentification par clé SSH :

  1. Génération de la paire de clés : Tout d'abord, vous générez une paire de clés publique et privée sur votre machine locale. La clé privée reste secrète, et la clé publique est celle que vous distribuerez.
  2. Déploiement de la clé publique : Vous copiez votre clé publique sur le serveur distant auquel vous souhaitez accéder. Cette clé est généralement ajoutée au fichier %s dans le répertoire personnel de votre utilisateur sur le serveur.
  3. Tentative de connexion : Lorsque vous initiez une connexion SSH depuis votre machine locale vers le serveur distant, votre client SSH indique qu'il souhaite s'authentifier à l'aide d'une clé.
  4. Défi du serveur : Le serveur, qui possède votre clé publique, génère une chaîne de données aléatoire (un "défi") et l'chiffre à l'aide de votre clé publique.
  5. Réponse du client : Le serveur envoie ce défi chiffré à votre client SSH. Votre client utilise ensuite votre clé privée pour déchiffrer le défi.
  6. Vérification : Votre client chiffre ensuite la chaîne aléatoire originale (ou un dérivé de celle-ci, avec les données de session) à l'aide de votre clé privée et la renvoie au serveur. Le serveur utilise votre clé publique pour déchiffrer cette réponse. Si la valeur déchiffrée correspond au défi initial, le serveur est certain que vous possédez la clé privée correcte.
  7. Authentification accordée : Si la vérification réussit, le serveur vous accorde l'accès et une session SSH sécurisée est établie.

De manière cruciale, votre clé privée ne quitte jamais votre machine locale pendant tout ce processus. Seules les preuves cryptographiques qui en dérivent sont échangées.

Génération d'une paire de clés SSH

Générer une paire de clés SSH est un processus simple en utilisant la commande %s sur votre machine locale (Linux, macOS ou WSL/Git Bash sur Windows).

ssh-keygen -t ed25519 -C "[email protected]"
  • -t ed25519 : Spécifie le type de clé à créer. ed25519 est un algorithme moderne, hautement sécurisé et efficace. rsa est également courant, mais ed25519 est généralement préféré aujourd'hui.
  • -C "[email protected]" : Ajoute un commentaire à la clé publique, ce qui vous aide à identifier son objectif ou son propriétaire.

Il vous sera demandé un fichier pour enregistrer la clé (par défaut : %s, %s) et une phrase de passe. Utilisez toujours une phrase de passe forte pour protéger votre clé privée.

Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519):
Created directory '/home/youruser/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/youruser/.ssh/id_ed25519.
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub.
The key fingerprint is: SHA256:...
The key's randomart image is:
+--[ED25519 256]----+
|      .=+          |
|     . o. .        |
|    . + o.         |
|   o = B o.        |
|  . S @ + +        |
|   = + B .         |
|  o * * E          |
| . o o             |
|  . .              |
+----[SHA256]-------+

Après la génération, vous aurez deux fichiers dans votre répertoire %s :

  • id_ed25519 (votre clé privée)
  • id_ed25519.pub (votre clé publique)

Avertissement : Assurez-vous que votre fichier de clé privée (id_ed25519) dispose d'autorisations strictes (par exemple, %s) afin que seul vous puissiez le lire/écrire.

Déploiement de votre clé publique

Pour utiliser l'authentification par clé, votre clé publique doit être placée sur le serveur distant auquel vous souhaitez accéder.

Utilisation de %s (Recommandé)

L'utilitaire %s est la manière la plus simple et la plus sûre de déployer votre clé publique. Il gère la création du répertoire %s et du fichier %s avec les autorisations correctes s'ils n'existent pas.

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host

Remplacez user par votre nom d'utilisateur sur le serveur distant et remote_host par l'adresse IP ou le nom d'hôte du serveur. Il vous sera demandé votre mot de passe pour user@remote_host une dernière fois pour télécharger la clé.

Déploiement manuel

Si %s n'est pas disponible, vous pouvez copier la clé publique manuellement :

  1. Copier le contenu de la clé publique : Affichez votre clé publique à l'aide de %s.
    bash cat ~/.ssh/id_ed25519.pub
    Copiez l'intégralité de la sortie, qui commence par ssh-ed25519 ... et se termine par votre commentaire.

  2. Connexion SSH au serveur distant en utilisant l'authentification par mot de passe :
    bash ssh user@remote_host
    Entrez votre mot de passe lorsque vous êtes invité.

  3. Créer le répertoire %s et le fichier %s s'ils n'existent pas :
    bash mkdir -p ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

  4. Ajouter votre clé publique à %s : Collez le contenu de la clé publique que vous avez copié précédemment dans le fichier %s.
    bash echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys
    (Remplacez ssh-ed25519 AAAA... par le contenu réel de votre clé publique)

Connexion avec des clés SSH

Une fois que votre clé publique se trouve sur le serveur, vous pouvez vous connecter simplement en spécifiant l'utilisateur et l'hôte :

ssh user@remote_host

Si vous avez plusieurs paires de clés ou si votre clé privée ne se trouve pas à l'emplacement par défaut (%s ou %s), vous devrez peut-être la spécifier à l'aide de l'option -i :

ssh -i ~/.ssh/my_custom_key user@remote_host

Si votre clé privée est protégée par une phrase de passe, il vous sera demandé de la saisir. Pour éviter de saisir la phrase de passe de manière répétée pendant une session, vous pouvez utiliser %s.

Avantages de sécurité de l'authentification par clé SSH

  1. Élimine la devinette de mot de passe : Comme les mots de passe ne sont pas utilisés pour l'authentification, les attaques par force brute contre votre mot de passe deviennent impossibles.
  2. Identifiants plus forts : Les clés SSH sont généralement des valeurs cryptographiques de 2048 bits (RSA) ou 256 bits (Ed25519), ce qui les rend beaucoup plus complexes et plus difficiles à casser que même les mots de passe générés par l'homme les plus forts.
  3. Aucune transmission du secret : Votre clé privée ne quitte jamais votre machine locale, réduisant considérablement le risque qu'elle soit interceptée ou volée pendant l'authentification.
  4. Compatible avec l'automatisation : Les clés permettent des connexions scriptables sans mot de passe, ce qui est essentiel pour les outils d'automatisation et les pipelines CI/CD.
  5. Protection par phrase de passe : L'ajout d'une phrase de passe à votre clé privée fournit une couche de sécurité supplémentaire. Même si votre fichier de clé privée est volé, il reste inutilisable sans la phrase de passe.

Gestion de vos clés SSH

%s

%s est un programme qui s'exécute en arrière-plan et conserve vos clés privées déchiffrées en mémoire. Lorsque vous tentez de vous connecter à un serveur SSH, votre client SSH peut interroger %s pour la clé privée nécessaire, éliminant ainsi le besoin de taper votre phrase de passe de manière répétée.

Pour démarrer %s et ajouter votre clé :

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Vous entrerez votre phrase de passe une seule fois lors de l'ajout de la clé à l'agent.

Nommage et organisation des clés

Pour gérer plusieurs clés (par exemple, pour différentes organisations, projets ou usages personnels), envisagez d'utiliser des noms significatifs :

ssh-keygen -t ed25519 -f ~/.ssh/id_work_project -C "work_project_key"
ssh-keygen -t ed25519 -f ~/.ssh/id_personal_github -C "personal_github_key"

Vous pouvez ensuite spécifier quelle clé utiliser avec l'option -i, ou configurer votre fichier %s pour sélectionner automatiquement la bonne clé en fonction de l'hôte.

Exemple de %s :

Host github.com
    IdentityFile ~/.ssh/id_personal_github
    User git

Host work-server
    Hostname 192.168.1.100
    IdentityFile ~/.ssh/id_work_project
    User devuser

Bonnes pratiques et conseils

  • Ne partagez jamais votre clé privée : C'est la règle d'or. Votre clé privée est votre identité numérique.
  • Utilisez une phrase de passe forte : Protégez votre clé privée avec une phrase de passe robuste, semblable à un mot de passe fort. Cela rend votre clé inutile même si elle tombe entre de mauvaises mains.
  • Faites pivoter régulièrement les clés : Générez périodiquement de nouvelles clés et révoquez les anciennes, surtout si vous soupçonnez qu'une clé a pu être compromise.
  • Restreindre les autorisations de fichiers : Assurez-vous que votre fichier de clé privée a des autorisations %s (rw-------) et que votre répertoire %s a des autorisations %s (rwx------).
  • Désactiver l'authentification par mot de passe sur les serveurs : Une fois que vous avez configuré l'authentification par clé, envisagez de désactiver l'authentification par mot de passe pour SSH sur vos serveurs afin d'améliorer considérablement la sécurité. Ceci est souvent fait en définissant %s dans %s.
  • Utiliser %s : Pour des raisons de commodité et de sécurité, utilisez %s pour gérer vos clés, en particulier celles protégées par des phrases de passe.

Conclusion

L'authentification par clé SSH fournit une méthode robuste, sécurisée et pratique pour accéder aux serveurs distants. En comprenant les rôles distincts des clés publiques et privées et la manière dont elles interagissent dans la poignée de main cryptographique, vous pouvez améliorer considérablement votre sécurité opérationnelle. Passer des connexions basées sur des mots de passe aux clés SSH est une étape fondamentale vers une meilleure gestion des serveurs et une protection contre les vecteurs d'attaque courants. Adoptez ce puissant mécanisme de sécurité pour protéger votre infrastructure numérique.