Guide étape par étape pour une authentification SSH sécurisée par clé
Configurez une authentification SSH sécurisée par clé avec des clés ED25519, authorized_keys, ssh-agent et des paramètres sshd plus sûrs.
Guide étape par étape pour une authentification SSH sécurisée par clé
L'authentification SSH par clé protège votre serveur contre de nombreuses attaques basées sur les mots de passe, mais seulement si vous générez la clé avec soin, installez la clé publique correctement et testez l'accès avant de modifier les paramètres du serveur.
Ce guide vous accompagne dans la génération de clés ED25519, l'installation de la clé publique, le test de connexion et les paramètres plus sûrs du démon SSH.
Comprendre l'authentification SSH par clé
L'authentification SSH par clé repose sur une paire de clés cryptographiquement liées : 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 la nécessité 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 de clé et une force
Bien que les clés RSA soient 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 configurations, 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 email réel ou une étiquette descriptive.
La commande vous demandera un emplacement pour enregistrer la clé et une phrase de passe facultative.
Génération de la paire de clés publique/privée ed25519.
Entrez le fichier dans lequel enregistrer la clé (/home/votreutilisateur/.ssh/id_ed25519) :
Entrez la phrase de passe (vide pour aucune phrase de passe) :
Entrez à nouveau la même phrase de passe :
Votre identification a été enregistrée dans /home/votreutilisateur/.ssh/id_ed25519
Votre clé publique a été enregistrée dans /home/votreutilisateur/.ssh/id_ed25519.pub
L'empreinte de la clé est : SHA256:...
L'image aléatoire de la clé est : ...
Définir une phrase de passe forte (fortement recommandé)
Lorsque vous y êtes invité, définissez toujours une phrase de passe forte pour votre clé privée. Cette phrase de passe chiffre votre clé privée sur votre machine locale, offrant une couche de sécurité supplémentaire. Si votre clé privée tombe entre de mauvaises mains, elle sera inutile sans la phrase de passe. Vous pouvez utiliser ssh-agent pour éviter de taper la phrase de passe à plusieurs reprises (voir Étape 4).
Emplacements des fichiers de clés
Par défaut, ssh-keygen enregistre votre clé privée dans ~/.ssh/id_ed25519 et votre clé publique dans ~/.ssh/id_ed25519.pub.
Permissions de 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_serveur
Remplacez utilisateur par votre nom d'utilisateur sur le serveur distant et adresse_ip_serveur par l'adresse IP ou le nom d'hôte du serveur. Vous serez invité à entrer 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.
Copiez le contenu de la clé publique depuis votre machine locale :
cat ~/.ssh/id_ed25519.pubCopiez l'intégralité de la sortie dans votre presse-papiers (elle commence par
ssh-ed25519 ...).Connectez-vous au serveur distant en utilisant votre mot de passe :
ssh utilisateur@adresse_ip_serveurCréez le répertoire
~/.sshs'il n'existe pas et définissez les permissions :mkdir -p ~/.ssh chmod 700 ~/.sshAjoutez votre clé publique à
authorized_keys:echo "COLLEZ_VOTRE_CLE_PUBLIQUE_ICI" >> ~/.ssh/authorized_keysAssurez-vous de remplacer
COLLEZ_VOTRE_CLE_PUBLIQUE_ICIpar le contenu réel que vous avez copié. Utiliser>>(ajout) est important pour éviter d'écraser les clés existantes s'il y en a.Définissez les permissions correctes pour
authorized_keys:chmod 600 ~/.ssh/authorized_keys- Avertissement : Des permissions incorrectes sur
~/.sshou~/.ssh/authorized_keysempêcheront l'authentification par clé de fonctionner.
- Avertissement : Des permissions incorrectes sur
Étape 3 : Tester votre authentification SSH par clé
Avant de procéder à la désactivation de l'authentification par mot de passe, il est absolument crucial de vérifier que l'authentification par clé fonctionne correctement. Déconnectez-vous du serveur distant si vous êtes toujours connecté depuis les étapes de copie manuelle.
Depuis votre machine locale, essayez de vous connecter au serveur sans spécifier de mot de passe :
ssh utilisateur@adresse_ip_serveur
- Si vous avez défini une phrase de passe pour votre clé privée, vous serez invité à la saisir.
- Si la connexion réussit sans invite de mot de passe (après la phrase de passe, 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 les problèmes avant de désactiver l'authentification par mot de passe, sinon 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 SSH par clé fonctionne, vous pouvez désactiver les connexions par 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 seuls ceux qui possèdent des clés SSH valides peuvent accéder au serveur.
Connectez-vous à votre serveur distant en utilisant votre clé SSH.
ssh utilisateur@adresse_ip_serveurModifiez le fichier de configuration du démon SSH. Ce fichier se trouve généralement à
/etc/ssh/sshd_config.sudo nano /etc/ssh/sshd_config(Vous pouvez utiliser
viou votre éditeur de texte préféré au lieu denano.)Localisez et modifiez les directives suivantes :
Trouvez
PasswordAuthenticationet changez sa valeur enno.#PasswordAuthentication yes PasswordAuthentication no(Décommentez la ligne si elle est commentée avec
#)Trouvez
KbdInteractiveAuthenticationet changez sa valeur enno. Sur les anciennes versions d'OpenSSH, la directive équivalente peut êtreChallengeResponseAuthentication.KbdInteractiveAuthentication no(Facultatif mais recommandé) Envisagez de désactiver la connexion root directement via SSH si vous prévoyez d'utiliser
sudoaprès vous être connecté en tant qu'utilisateur normal.PermitRootLogin no(Facultatif) Envisagez de changer le port SSH par défaut de
22vers 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 2222Si vous changez le port, n'oubliez pas de le spécifier avec l'option
-plors de la connexion (par exemple,ssh -p 2222 utilisateur@adresse_ip_serveur).
Enregistrez les modifications et quittez l'éditeur de texte.
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) :
sudo sshd -t sudo systemctl restart sshdSystèmes plus anciens basés sur SysVinit :
sudo service ssh restart
Crucialement, ouvrez une nouvelle fenêtre de terminal (ne fermez pas votre session SSH active actuelle !) et essayez de vous connecter en utilisant votre clé. Cela teste la nouvelle configuration sans vous verrouiller si quelque chose s'est mal passé.
ssh utilisateur@adresse_ip_serveurSi vous avez changé le port :
ssh -p 2222 utilisateur@adresse_ip_serveurSi la connexion réussit, vous pouvez maintenant fermer en toute sécurité votre session SSH d'origine.
Si la nouvelle connexion échoue, annulez immédiatement les modifications dans
sshd_configdans votre session SSH d'origine toujours active et redémarrez le service SSH à nouveau, puis réévaluez.
Meilleures pratiques et conseils
- Utilisez toujours une phrase de passe 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-agentpour plus de commodité.ssh-agentvous permet de charger votre(vos) clé(s) privée(s) en mémoire et de ne taper votre phrase de passe qu'une seule fois par session, même sur plusieurs connexions SSH. Ajoutez votre clé à l'agent avecssh-add ~/.ssh/id_ed25519. - Faites régulièrement pivoter 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 part ou si la sécurité d'une clé est suspectée d'être compromise.
- Limitez
PermitRootLoginànoouprohibit-password. Il est généralement préférable de se connecter en tant qu'utilisateur normal et d'utilisersudopour 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
ufwoufirewalldpeuvent vous aider.
Conclusion finale
Votre clé privée est désormais votre principal identifiant de connexion, alors protégez-la avec une phrase de passe et des permissions de fichier strictes. Gardez une session SSH testée ouverte pendant la modification de sshd_config, validez la configuration avec sshd -t, et ne fermez l'ancienne session qu'après qu'une nouvelle connexion par clé fonctionne.