Leçons 1/4 · 25 min
SSH : se connecter par clé, fermer l'accès par mot de passe
Une question de départ
Vous louez un petit serveur chez un hébergeur. Quelques minutes après sa mise en ligne, les journaux montrent des dizaines de tentatives de connexion venues du monde entier. Personne ne vous « vise » : des programmes essaient en continu des mots de passe sur toute adresse qui répond sur le port 22. Un mot de passe, même long, est une cible permanente. Une clé résout le problème, mais seulement si on l'utilise correctement.
Ce que fait SSH
SSH (Secure Shell) ouvre un terminal chiffré sur une machine distante. Il utilise le port TCP 22 par défaut (atelier 101). Il fait deux choses distinctes :
- Authentifier le serveur auprès de vous (pour que vous ne parliez pas à un imposteur).
- Authentifier l'utilisateur auprès du serveur.
Authentification par clé : l'idée
Une paire de clés comprend une clé privée, secrète, qui produit des signatures, et une clé publique que n'importe qui peut utiliser pour vérifier ces signatures (principe détaillé à l'atelier 105). Pour SSH :
- Sur votre poste, vous créez une paire :
ssh-keygen -t ed25519 -C "mon-portable". Le fichier~/.ssh/id_ed25519est la clé privée ;~/.ssh/id_ed25519.pubest la clé publique. - Vous copiez la clé publique dans
~/.ssh/authorized_keyssur le serveur (la commandessh-copy-id utilisateur@serveurle fait). - À la connexion, votre client signe avec la clé privée des données liées à cette session (c'est une simplification : il n'y a pas de défi aléatoire séparé) ; le serveur vérifie la signature avec la clé publique. La clé privée ne quitte jamais votre poste et n'est jamais envoyée au serveur.
Protégez le fichier privé par une phrase de passe : s'il est volé, il reste chiffré.
Première connexion : l'empreinte du serveur
La première fois, le client affiche :
The authenticity of host 'srv.example.test (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz0123456789FICTIF.
Are you sure you want to continue connecting (yes/no/[fingerprint])?(L'adresse 203.0.113.10 et l'empreinte sont des exemples fictifs ; la plage 203.0.113.0/24 est réservée à la documentation.) Comparez l'empreinte avec celle que l'hébergeur affiche dans sa console. Si vous répondez « yes » sans comparer, vous acceptez peut-être un imposteur. Une fois acceptée, l'empreinte est mémorisée dans ~/.ssh/known_hosts. Si elle change plus tard, SSH affiche un grand avertissement (« REMOTE HOST IDENTIFICATION HAS CHANGED ») : ne l'ignorez pas, enquêtez (réinstallation légitime ou interception).
Permissions : sans elles, SSH refuse
SSH refuse une clé privée lisible par d'autres. Règles usuelles :
| Élément | Mode octal | Pourquoi |
|---|---|---|
~/.ssh (dossier) | 700 | seul le propriétaire entre |
~/.ssh/id_ed25519 (privée) | 600 | lecture/écriture propriétaire seul |
~/.ssh/authorized_keys | 600 | personne d'autre ne doit pouvoir y ajouter une clé |
Le message « Permissions 0644 for 'id_ed25519' are too open. UNPROTECTED PRIVATE KEY FILE! » vous dit exactement cela. Correction : chmod 600 ~/.ssh/id_ed25519.
Fermer l'accès par mot de passe — sans s'enfermer dehors
Le fichier /etc/ssh/sshd_config configure le serveur SSH. Les réglages utiles :
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PubkeyAuthentication yes(KbdInteractiveAuthentication no ferme une autre voie par laquelle un mot de passe peut encore être demandé sur certaines images de serveur ; selon la version d'OpenSSH, ce mot-clé peut s'appeler ChallengeResponseAuthentication.)
Procédure sûre, dans l'ordre :
- Gardez une seconde session ouverte (ne fermez jamais votre seule connexion).
- Vérifiez qu'une clé fonctionne : ouvrez une nouvelle connexion avec la clé.
- Modifiez la configuration, puis testez sa syntaxe :
sudo sshd -t(aucune sortie = syntaxe correcte). - Rechargez le service (
sudo systemctl reload sshsur Ubuntu ; le nom du service estsshdsur d'autres distributions). Un changement de port peut demander un redémarrage plutôt qu'un rechargement, surtout si le service est lancé par un socket systemd : vérifiez avecss -tlnp. - Depuis un troisième terminal, vérifiez que la connexion par clé marche encore et qu'une tentative par mot de passe est refusée.
Ce que cela ne garantit PAS
- Une clé protège la connexion, pas la machine : si votre portable est compromis, la clé l'est aussi. D'où la phrase de passe et une clé par appareil.
- Désactiver le mot de passe n'empêche pas les tentatives, seulement leur succès. Changer de port peut réduire le bruit des journaux, ce n'est pas une protection.
- Un compte sans mot de passe peut encore être attaqué par d'autres services ouverts : fermer SSH n'est pas fermer le serveur.
À retenir
Créez une paire de clés, déposez la publique, comparez l'empreinte à la première connexion, mettez les bonnes permissions, puis désactivez mot de passe et root distant — en gardant une session ouverte et en vérifiant la valeur effective.
