Guide pas à pas pour sécuriser l'authentification SSH par clé

Optimisez la sécurité de votre accès à distance grâce à ce guide complet et étape par étape sur l'authentification SSH par clé. Apprenez à générer des paires de clés ED25519 robustes, à distribuer votre clé publique de manière sécurisée et, surtout, à désactiver les connexions par mot de passe vulnérables sur votre serveur. Ce tutoriel fournit des commandes exploitables et des meilleures pratiques essentielles, y compris l'utilisation de phrases secrètes (passphrase) et la gestion des clés, garantissant que vos connexions SSH sont à la fois pratiques et hautement sécurisées. Renforcez dès aujourd'hui la défense de votre serveur contre les attaques par force brute.

32 vues

Guide étape par étape pour l'authentification sécurisée par clé SSH

Secure Shell (SSH) est la colonne vertébrale de l'administration de systèmes à distance, permettant un accès sécurisé aux serveurs sur un réseau non sécurisé. Bien que l'authentification par mot de passe soit courante, elle est intrinsèquement vulnérable aux attaques par force brute et au bourrage d'identifiants. L'authentification par clé SSH offre une alternative bien plus robuste et sécurisée, exploitant des paires de clés cryptographiques pour vérifier l'identité sans transmettre de mots de passe.

Ce guide vous accompagnera à travers tout le processus de mise en place de l'authentification sécurisée par clé SSH. Vous apprendrez à générer votre paire de clés SSH, à distribuer votre clé publique de manière sécurisée à un serveur distant, et, de manière cruciale, à renforcer la configuration SSH de votre serveur en désactivant les connexions par mot de passe moins sécurisées. En suivant ces étapes, vous améliorerez considérablement la posture de sécurité de votre accès à distance, rendant vos systèmes plus résilients face aux vecteurs d'attaque courants.

Comprendre l'authentification par clé SSH

L'authentification par clé SSH repose sur une paire de clés liées cryptographiquement : une clé privée et une clé publique.

  • Clé privée : Cette clé doit rester secrète et sécurisée sur votre machine locale. C'est comme un mot de passe très complexe que vous seul possédez.
  • Clé publique : Cette clé peut être partagée librement et est placée sur le serveur distant auquel vous souhaitez accéder. Elle est utilisée par le serveur pour vérifier votre identité.

Lorsque vous tentez de vous connecter, le serveur utilise votre clé publique pour défier votre machine locale. Votre machine locale utilise ensuite sa clé privée pour répondre à ce défi, prouvant votre identité sans jamais envoyer la clé privée sur le réseau. Cette méthode est non seulement plus sécurisée, mais aussi plus pratique, car elle élimine le besoin de taper un mot de passe pour chaque connexion une fois correctement configurée.

Étape 1 : Générer votre paire de clés SSH

L'utilitaire ssh-keygen est utilisé pour créer de nouvelles paires de clés SSH. Il est recommandé d'utiliser des algorithmes modernes et robustes comme ED25519.

Choisir un type et une force de clé

Alors que les clés RSA sont encore largement utilisées, ED25519 offre une excellente sécurité avec des longueurs de clé plus courtes et des opérations plus rapides. Pour les nouvelles installations, ED25519 est généralement préféré.

Générer la paire de clés

Sur votre machine locale (client), ouvrez votre terminal et exécutez la commande suivante :

ssh-keygen -t ed25519 -C "[email protected]"
  • -t ed25519 : Spécifie le type de clé comme ED25519.
  • -C "[email protected]" : Ajoute un commentaire à la clé publique, souvent utilisé pour l'identification. Remplacez par votre véritable email ou une étiquette descriptive.

La commande vous demandera un emplacement pour sauvegarder la clé et une phrase secrète facultative.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519): 
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: ...

Définir une phrase secrète forte (fortement recommandé)

Lorsque vous y êtes invité, définissez toujours une phrase secrète forte pour votre clé privée. Cette phrase secrète chiffre votre clé privée sur votre machine locale, offrant une couche de sécurité supplémentaire. Si votre clé privée tombe un jour entre de mauvaises mains, elle sera inutile sans la phrase secrète. Vous pouvez utiliser ssh-agent pour éviter de taper la phrase secrète à plusieurs reprises (voir Étape 4).

Emplacements des fichiers de clés

Par défaut, ssh-keygen sauvegarde votre clé privée dans ~/.ssh/id_ed25519 et votre clé publique dans ~/.ssh/id_ed25519.pub.

Permissions pour votre clé privée

Il est crucial que votre fichier de clé privée ait des permissions très strictes. Seul le propriétaire doit pouvoir le lire. ssh-keygen définit généralement cela correctement, mais il est bon de vérifier :

chmod 600 ~/.ssh/id_ed25519

Étape 2 : Distribuer votre clé publique au serveur

Une fois que vous avez généré votre paire de clés, votre clé publique doit être copiée sur le serveur distant auquel vous souhaitez accéder. Elle doit être placée dans un fichier nommé authorized_keys dans le répertoire ~/.ssh/ de votre utilisateur sur le serveur distant.

Méthode 1 : Utiliser ssh-copy-id (Recommandé)

ssh-copy-id est la méthode la plus simple et la plus sûre. Elle se connecte au serveur distant (en utilisant votre mot de passe), crée le répertoire ~/.ssh s'il n'existe pas, définit les permissions correctes et ajoute votre clé publique à ~/.ssh/authorized_keys.

ssh-copy-id utilisateur@adresse_ip_de_votre_serveur

Remplacez utilisateur par votre nom d'utilisateur sur le serveur distant et adresse_ip_de_votre_serveur par l'adresse IP ou le nom d'hôte du serveur. Il vous sera demandé votre mot de passe sur le serveur distant.

Méthode 2 : Copie manuelle

Si ssh-copy-id n'est pas disponible, vous pouvez copier la clé publique manuellement.

  1. Copiez le contenu de la clé publique depuis votre machine locale :
    bash cat ~/.ssh/id_ed25519.pub
    Copiez toute la sortie dans votre presse-papiers (elle commence par ssh-ed25519 ...).

  2. Connectez-vous au serveur distant en utilisant votre mot de passe :
    bash ssh utilisateur@adresse_ip_de_votre_serveur

  3. Créez le répertoire ~/.ssh s'il n'existe pas et définissez les permissions :
    bash mkdir -p ~/.ssh chmod 700 ~/.ssh

  4. Ajoutez votre clé publique à authorized_keys :
    bash echo "COLLEZ_VOTRE_CLE_PUBLIQUE_ICI" >> ~/.ssh/authorized_keys
    Assurez-vous de remplacer COLLEZ_VOTRE_CLE_PUBLIQUE_ICI par le contenu réel que vous avez copié. L'utilisation de >> (ajouter) est importante pour éviter d'écraser les clés existantes s'il y en a.

  5. Définissez les permissions correctes pour authorized_keys :
    bash chmod 600 ~/.ssh/authorized_keys

    • Avertissement : Des permissions incorrectes sur ~/.ssh ou ~/.ssh/authorized_keys empêcheront l'authentification par clé de fonctionner.

Étape 3 : Tester votre authentification par clé SSH

Avant de désactiver l'authentification par mot de passe, il est absolument essentiel de vérifier que l'authentification par clé fonctionne correctement. Déconnectez-vous du serveur distant si vous êtes toujours connecté à partir des étapes de copie manuelle.

Depuis votre machine locale, tentez de vous connecter au serveur sans spécifier de mot de passe :

ssh utilisateur@adresse_ip_de_votre_serveur
  • Si vous avez défini une phrase secrète pour votre clé privée, il vous sera demandé de la saisir.
  • Si la connexion est réussie sans invite de mot de passe (après la phrase secrète, le cas échéant), votre authentification par clé fonctionne. Vous devriez voir l'invite du serveur distant.

Ne PAS passer à l'Étape 4 si vous ne pouvez pas vous connecter en utilisant votre clé SSH. Résolvez tout problème avant de désactiver l'authentification par mot de passe, ou vous risquez de vous verrouiller hors du serveur.

Étape 4 : Améliorer la sécurité – Désactiver l'authentification par mot de passe

Une fois que vous avez confirmé que l'authentification par clé SSH fonctionne, vous pouvez désactiver les connexions basées sur mot de passe sur votre serveur pour améliorer considérablement la sécurité. Cela empêche les attaques par force brute contre votre mot de passe et garantit que seules les personnes disposant de clés SSH valides peuvent accéder au serveur.

  1. Connectez-vous à votre serveur distant en utilisant votre clé SSH.
    bash ssh utilisateur@adresse_ip_de_votre_serveur

  2. Modifiez le fichier de configuration du démon SSH. Ce fichier se trouve généralement à l'emplacement /etc/ssh/sshd_config.
    bash sudo nano /etc/ssh/sshd_config
    (Vous pouvez utiliser vi ou votre éditeur de texte préféré au lieu de nano.)

  3. Localisez et modifiez les directives suivantes :

    • Trouvez PasswordAuthentication et changez sa valeur en no.
      #PasswordAuthentication yes PasswordAuthentication no
      (Décommentez la ligne si elle est commentée avec #)

    • Trouvez ChallengeResponseAuthentication et changez sa valeur en no.
      #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no

    • (Facultatif mais recommandé) Envisagez de désactiver la connexion root directement via SSH si vous prévoyez d'utiliser sudo après vous être connecté en tant qu'utilisateur normal.
      PermitRootLogin no

    • (Facultatif) Envisagez de changer le port SSH par défaut de 22 à un port élevé non standard (par exemple, 2222). Cela n'ajoute pas de sécurité contre les attaques ciblées, mais peut réduire le bruit des scanners de ports automatisés.
      #Port 22 Port 2222
      Si vous changez le port, n'oubliez pas de le spécifier avec l'option -p lors de la connexion (par exemple, ssh -p 2222 utilisateur@adresse_ip_de_votre_serveur).

  4. Sauvegardez les modifications et quittez l'éditeur de texte.

  5. Redémarrez le service SSH pour appliquer la nouvelle configuration. La commande varie légèrement selon votre système d'exploitation (par exemple, Ubuntu/Debian vs. CentOS/RHEL).

    • Systèmes basés sur Systemd (la plupart des distributions Linux modernes) :
      bash sudo systemctl restart sshd

    • Anciens systèmes basés sur SysVinit :
      bash sudo service ssh restart

  6. De manière cruciale, ouvrez une nouvelle fenêtre de terminal (ne fermez pas votre session SSH active actuelle !) et tentez de vous connecter en utilisant votre clé. Cela teste la nouvelle configuration sans vous verrouiller hors du système si quelque chose s'est mal passé.

    bash ssh utilisateur@adresse_ip_de_votre_serveur
    Si vous avez changé le port :
    bash ssh -p 2222 utilisateur@adresse_ip_de_votre_serveur

    Si la connexion est réussie, vous pouvez maintenant fermer votre session SSH originale en toute sécurité.

    Si la nouvelle connexion échoue, annulez immédiatement les modifications dans sshd_config dans votre session SSH originale toujours active et redémarrez le service SSH, puis réévaluez.

Bonnes pratiques et conseils

  • Utilisez toujours une phrase secrète forte pour votre clé privée. C'est votre dernière ligne de défense si votre clé privée est compromise.
  • Protégez votre clé privée. Ne la partagez jamais et assurez-vous qu'elle est stockée en toute sécurité avec des permissions de fichier strictes (chmod 600 ~/.ssh/id_ed25519). Envisagez des modules de sécurité matériels (HSM) ou des YubiKeys pour une protection ultime.
  • Utilisez ssh-agent pour plus de commodité. ssh-agent vous permet de charger votre ou vos clés privées en mémoire et de ne taper votre phrase secrète qu'une seule fois par session, même sur plusieurs connexions SSH. Ajoutez votre clé à l'agent avec ssh-add ~/.ssh/id_ed25519.
  • Faites pivoter régulièrement vos clés SSH. Générez périodiquement de nouvelles paires de clés et supprimez les anciennes clés publiques de vos serveurs, surtout si un membre de l'équipe quitte ou si la sécurité d'une clé est suspectée d'être compromise.
  • Limitez PermitRootLogin à no ou prohibit-password. Il est généralement préférable de se connecter en tant qu'utilisateur normal et d'utiliser sudo pour les tâches administratives.
  • Configurez un pare-feu. Assurez-vous que seuls les ports nécessaires (comme votre port SSH) sont ouverts sur Internet. Des outils comme ufw ou firewalld peuvent vous aider.

Conclusion

En suivant ce guide étape par étape, vous avez réussi à configurer et à sécuriser l'authentification par clé SSH pour votre serveur distant. Vous avez généré une paire de clés cryptographique robuste, distribué votre clé publique et, surtout, désactivé les connexions par mot de passe moins sécurisées. Cela améliore considérablement la sécurité de votre serveur, le rendant plus résistant aux tentatives de piratage courantes.

N'oubliez jamais de protéger votre clé privée et sa phrase secrète avec vigilance, car elle est désormais la principale identifiant pour accéder à votre serveur. Adoptez ces bonnes pratiques pour maintenir une posture de sécurité forte pour tous vos besoins d'accès à distance.