Pourquoi passer à l’authentification par clé#
Après des mois de maintenance d’un serveur domestique avec accès SSH ouvert, j’en ai eu assez des tentatives de force brute contre le mot de passe. Passer à l’authentification par clé publique a été la meilleure décision de sécurité que j’ai prise. Les clés sont mathématiquement impossibles à craquer par force brute, alors que les mots de passe sont toujours une cible.
Génération de la clé SSH#
La première chose est de générer une paire de clés sur ta machine locale (pas sur le serveur) :
ssh-keygen -t ed25519 -C "tu_email@ejemplo.com"Il te demandera où enregistrer la clé. Appuie sur Entrée pour utiliser l’emplacement par défaut (~/.ssh/id_ed25519). Ensuite, il te demandera une phrase de passe (passphrase). J’utilise un mot de passe fort ici, car il protège ta clé privée localement.
Après cela, tu auras deux fichiers :
~/.ssh/id_ed25519- Ta clé privée (ne la partage jamais)~/.ssh/id_ed25519.pub- Ta clé publique (c’est celle-ci qui va sur le serveur)
Copier la clé sur le serveur#
La méthode la plus sécurisée est d’utiliser ssh-copy-id. Depuis ta machine locale :
ssh-copy-id -i ~/.ssh/id_ed25519.pub usuario@servidorCela ajoutera ta clé publique au fichier ~/.ssh/authorized_keys sur le serveur. Tu auras toujours besoin de ton mot de passe pour cette étape.
Si ssh-copy-id ne fonctionne pas, tu peux le faire manuellement :
cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"Vérifier que cela fonctionne#
Avant de désactiver les mots de passe, vérifie que l’accès par clé fonctionne :
ssh usuario@servidorSi tout va bien, tu devrais accéder sans qu’on te demande un mot de passe (ou seulement la passphrase de ta clé locale, si tu l’as configurée).
Configuration du serveur SSH#
Maintenant, nous éditons /etc/ssh/sshd_config sur le serveur :
sudo nano /etc/ssh/sshd_configCherche ces lignes et ajuste-les (supprime le # s’il est commenté) :
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin noCe sont les lignes critiques :
- PubkeyAuthentication : Active l’authentification par clé (doit être sur
yes) - PasswordAuthentication : Tu la changes en
nopour désactiver les mots de passe - PermitEmptyPasswords : Assure qu’il n’y a pas d’accès sans mot de passe vide
- PermitRootLogin : C’est une bonne pratique de mettre ceci sur
no
Appliquer les changements#
Avant de redémarrer le service SSH, vérifie que la configuration est valide :
sudo sshd -tSi cela ne renvoie pas d’erreurs, redémarre le service :
sudo systemctl restart sshTest final#
Voici le moment de vérité. Ouvre une nouvelle session SSH sans fermer la session actuelle :
ssh usuario@servidorSi tu accèdes sans problème, tout fonctionne. Si ce n’est pas le cas, garde la session précédente ouverte pour annuler les modifications.
Sauvegarde et checklist#
Avant de faire cela, je sauvegarde sshd_config :
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backupMa checklist avant de désactiver les mots de passe :
- Clé SSH générée localement
- Clé publique copiée sur le serveur
- Accès par clé testé correctement
-
sshd -tsans erreurs - Sauvegarde de
sshd_configeffectuée - Session de test ouverte avant redémarrage
Résultat#
Depuis que j’ai mis cela en place, les logs du serveur sont calmes. Zéro tentative de force brute réussie. Les clés SSH sont l’une de ces améliorations de sécurité qui semblent compliquées au début mais qui valent vraiment le coup.
Équipement recommandé#
- YubiKey 5 NFC — Clé de sécurité physique pour 2FA et accès SSH sécurisé
- Raspberry Pi 3 B+ — Serveur léger à faible consommation pour démarrer ton homelab
Liens d’affiliation. Aucun coût supplémentaire pour toi.