Sécuriser un serveur Leçon 2
Se connecter avec une clé SSH
Remplacer le mot de passe par une paire de clés, puis interdire les connexions par mot de passe et en root.
À la fin de cette leçon, tu sauras
- Comprendre la paire clé privée / clé publique
- Créer une clé et l'installer sur le serveur
- Durcir la configuration du serveur SSH sans se bloquer dehors
Le problème des mots de passe
Ouvre le journal de n'importe quel serveur sur Internet : des milliers de tentatives par jour essaient root / 123456, admin / admin… Un mot de passe peut être deviné, volé ou réutilisé. Une clé SSH, non.
Une paire de clés
- la clé privée reste sur ton ordinateur, et ne le quitte jamais (comme la clé de chez toi) ;
- la clé publique (le fichier
.pub) se donne au serveur (comme une serrure qu'on installe : la montrer ne risque rien).
À la connexion, le serveur pose une « question » que seule la clé privée sait résoudre. Rien de secret ne passe sur le réseau.
# sur TON ordinateur (Windows PowerShell, macOS ou Linux)
ssh-keygen -t ed25519 -C "moi@mon-pc" # crée ~/.ssh/id_ed25519 et id_ed25519.pub
ssh-copy-id eleve@mon-serveur.fr # installe la clé publique sur le serveur
ssh eleve@mon-serveur.fr # plus de mot de passe demandéSous Windows : ssh-copy-id n'existe pas. On copie le contenu de id_ed25519.pub à la fin du fichier ~/.ssh/authorized_keys du serveur. C'est tout ce que fait ssh-copy-id.
Durcir le serveur SSH
Une fois la connexion par clé testée, on ferme les autres portes. Plutôt que de modifier le gros fichier /etc/ssh/sshd_config, on ajoute un petit fichier à nous dans /etc/ssh/sshd_config.d/ : il est lu en premier, et une mise à jour de Debian ne l'écrasera pas.
echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf
echo "PermitRootLogin no" | sudo tee -a /etc/ssh/sshd_config.d/10-securite.conf
sudo sshd -t # vérifie la configuration : rien ne s'affiche = tout va bien
sudo systemctl reload ssh # applique, sans couper les connexions en coursPourquoi | sudo tee et pas sudo echo … > fichier ? Parce que la redirection > est faite par ton shell, sans les droits administrateur. tee, lancé avec sudo, écrit le fichier lui-même ; -a ajoute à la fin au lieu d'écraser.
Attention : garde toujours ta session SSH actuelle ouverte, et teste la nouvelle configuration dans une deuxième fenêtre. Si quelque chose ne va pas, tu peux encore corriger depuis la première.
sudo sshd -T affiche la configuration réellement appliquée, toutes options confondues : sudo sshd -T | grep passwordauthentication vérifie une option précise.
À retenir
- La clé privée ne quitte jamais ton ordinateur ; la clé publique (
.pub) va dans~/.ssh/authorized_keysdu serveur. ssh-keygen -t ed25519 -C "moi@pc", puisssh-copy-id utilisateur@serveur.- Ses réglages dans un fichier à soi :
/etc/ssh/sshd_config.d/10-securite.conf. PasswordAuthentication noetPermitRootLogin no, une fois la clé testée.- Toujours
sudo sshd -tavantsudo systemctl reload ssh, et garder une session ouverte.
Voir la fiche de révision de cette leçon (à imprimer ou à relire avant un contrôle)
Exercice 1 · Ta première paire de clés
Facile ✓ RéussiDans ce terminal, le « serveur » est simulé par la même machine.
- crée une paire de clés de type
ed25519, avec le commentaireeleve@pc; - liste le contenu de ton dossier
~/.ssh; - affiche ta clé publique (jamais la privée !) ;
- installe-la sur le serveur avec
ssh-copy-id eleve@serveur.
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : La clé publique ~/.ssh/id_ed25519.pub existe
- À faire : Le commentaire est eleve@pc
- À faire : La clé publique est affichée
- À faire : La clé privée n'est jamais affichée
- À faire : La clé est installée sur le serveur (authorized_keys)
Bravo, cet exercice est réussi !
- Indice 1 :
ssh-keygen -t ed25519 -C "eleve@pc"crée les deux fichiers dans~/.ssh. - Indice 2 : La clé publique est celle qui finit par
.pub:cat ~/.ssh/id_ed25519.pub. - Indice 3 : Pour finir :
ssh-copy-id eleve@serveur.
Toujours bloqué ? Voir une solution
ssh-keygen -t ed25519 -C "eleve@pc"
ls ~/.ssh
cat ~/.ssh/id_ed25519.pub
ssh-copy-id eleve@serveur Exercice 2 · Fermer la porte aux mots de passe
Moyen ✓ RéussiLa connexion par clé fonctionne. Crée le fichier /etc/ssh/sshd_config.d/10-securite.conf qui :
- interdit la connexion par mot de passe (
PasswordAuthentication no) ; - interdit la connexion directe en root (
PermitRootLogin no) ; - limite à 3 essais par connexion (
MaxAuthTries 3).
Vérifie ensuite la configuration avec sshd -t, puis recharge le service ssh.
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : PasswordAuthentication vaut no
- À faire : PermitRootLogin vaut no
- À faire : MaxAuthTries vaut 3
- À faire : Le réglage est dans sshd_config.d/10-securite.conf
- À faire : La configuration est vérifiée (sshd -t) avant le rechargement
Bravo, cet exercice est réussi !
- Indice 1 : Première ligne :
echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf. - Indice 2 : Les suivantes s'ajoutent :
| sudo tee -a …, sinon tu écrases la première. - Indice 3 : Pour finir :
sudo sshd -tpuissudo systemctl reload ssh.
Toujours bloqué ? Voir une solution
echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf
echo "PermitRootLogin no" | sudo tee -a /etc/ssh/sshd_config.d/10-securite.conf
echo "MaxAuthTries 3" | sudo tee -a /etc/ssh/sshd_config.d/10-securite.conf
sudo sshd -t
sudo systemctl reload ssh Exercice 3 · Une faute de frappe dangereuse
Pour aller plus loin ✓ RéussiUn collègue a modifié la configuration SSH, mais il a fait une faute de frappe. S'il redémarre le serveur, SSH ne démarrera plus.
- lance la vérification de la configuration et lis le message d'erreur ;
- regarde le fichier fautif ;
- réécris-le correctement (il doit contenir
PasswordAuthentication no) ; - vérifie à nouveau, puis affiche la valeur appliquée de
passwordauthenticationavecsshd -Tetgrep.
Tape tes commandes ici ou dans le fichier à gauche : chaque commande tapée dans le terminal est ajoutée au fichier.
Consignes à réussir
- À faire : La configuration est valide
- À faire : PasswordAuthentication vaut no
- À faire : Le fichier fautif est affiché
- À faire : La valeur appliquée est vérifiée avec sshd -T
Bravo, cet exercice est réussi !
- Indice 1 :
sudo sshd -tindique le fichier et le numéro de ligne de l'erreur. - Indice 2 : Il manque un « s » :
PaswordAuthentication. Réécris le fichier avec| sudo tee(sans-a, pour remplacer). - Indice 3 : Vérifie :
sudo sshd -t, puissudo sshd -T | grep passwordauthentication.
Toujours bloqué ? Voir une solution
# la faute du collègue (ne pas modifier)
echo "PaswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf
# à toi :
sudo sshd -t
cat /etc/ssh/sshd_config.d/10-securite.conf
echo "PasswordAuthentication no" | sudo tee /etc/ssh/sshd_config.d/10-securite.conf
sudo sshd -t
sudo sshd -T | grep passwordauthentication