Chapitre 4.2 — Les clés SSH
⏱️ TL;DR — Une clé SSH, c’est une paire : une clé privée qui reste chez toi (jamais partagée, jamais copiée nulle part), et une clé publique que tu distribues sans crainte sur chaque serveur. Tu la génères en une commande :
ssh-keygen -t ed25519 -C "commentaire". Elle atterrit dans~/.ssh/id_ed25519(privée) et~/.ssh/id_ed25519.pub(publique). Tu déposes la publique sur le serveur avecssh-copy-id user@host— ou à la main dans~/.ssh/authorized_keys(attention aux permissions, piège classique). Une passphrase chiffre ta clé privée au repos ; l’agent SSH (ssh-agent+ssh-add) évite de la retaper à chaque fois. Règle d’or, non négociable : on ne partage JAMAIS la clé privée.
🎯 Objectifs
- Comprendre la cryptographie asymétrique en deux phrases (clé privée / clé publique).
- Générer une paire de clés
ed25519avecssh-keygen, et savoir où elle vit. - Déposer ta clé publique sur un serveur (
ssh-copy-idou méthode manuelle) et régler les permissions. - Protéger ta clé privée par une passphrase et l’utiliser sans friction grâce à l’agent SSH.
- Savoir ce qu’est une clé de déploiement (deploy key) pour la CI.
La crypto asymétrique en deux phrases
Tout repose sur une idée simple. Tu possèdes deux clés mathématiquement liées : ce que l’une verrouille, seule l’autre peut le déverrouiller. La clé privée reste secrète et chez toi ; la clé publique peut être donnée à tout le monde sans aucun risque — la connaître ne permet pas de retrouver la privée.
Pour SSH, ça donne : tu déposes ta clé publique sur le serveur ; à la connexion, le serveur te met au défi de prouver que tu détiens la clé privée correspondante, ce que tu fais sans jamais la révéler. Pas de secret transmis, pas de bruteforce possible (revoir le 4.1).
💡 Réflexe — Retiens l’asymétrie par l’image du cadenas : la clé publique est un cadenas ouvert que tu sèmes partout ; la clé privée est l’unique clé qui l’ouvre, et elle ne quitte jamais ta poche. On distribue les cadenas, jamais la clé.
Générer ta paire de clés
Une seule commande, sur ton poste (pas sur le serveur) :
ssh-keygen -t ed25519 -C "alex@formacampus"
# ssh-keygen -> l'outil de generation de cles SSH
# -t ed25519 -> le TYPE de cle : ed25519, moderne, court et solide
# -C "..." -> un COMMENTAIRE libre, pour identifier la cle (souvent email ou machine)ssh-keygen te pose alors deux questions :
Enter file in which to save the key (~/.ssh/id_ed25519): # ou l'enregistrer -> Entree pour l'emplacement par defaut
Enter passphrase (empty for no passphrase): # une passphrase pour chiffrer la cle privee (recommande)Quel type de clé choisir ?
ed25519: le choix par défaut aujourd’hui. Clés courtes, génération et vérification rapides, sécurité excellente. Recommandé partout.rsaen 4096 bits (ssh-keygen -t rsa -b 4096) : l’option de compatibilité, si tu tombes sur un système ancien qui ne gère pased25519. Plus long, mais sûr en 4096 bits.
📚 La doc — Les types, tailles et options exactes de
ssh-keygenévoluent avec les versions d’OpenSSH. En cas de doute sur un flag ou une valeur, la référence qui fait autorité estman ssh-keygen. On enseigne ici les choix stables (ed25519, RSA 4096) ; le détail courant est dans le manuel.
Où vivent les clés
Par défaut, ta paire atterrit dans le dossier ~/.ssh/ :
~/.ssh/id_ed25519 # la cle PRIVEE -> reste chez toi, ne sort jamais
~/.ssh/id_ed25519.pub # la cle PUBLIQUE -> c'est celle-ci qu'on distribueLa règle mnémotechnique : le fichier .pub (publique) est celui qu’on publie. L’autre, celui sans extension, est le trésor. Tu peux afficher ta clé publique sans risque :
cat ~/.ssh/id_ed25519.pub
# affiche une ligne du type : ssh-ed25519 AAAAC3Nza... alex@formacampus
# c'est CETTE ligne qu'on colle dans authorized_keys du serveurLa passphrase
Quand ssh-keygen te propose une passphrase, dis oui. Elle chiffre ta clé privée sur ton disque. Sans elle, quiconque met la main sur ton fichier id_ed25519 (portable volé, backup qui fuit) obtient un accès direct à tous tes serveurs. Avec elle, le fichier volé est inutilisable sans la phrase secrète.
🔒 Sécurité — Une clé privée sans passphrase posée sur un laptop, c’est un passe pour tous tes serveurs à portée de qui vole la machine. La passphrase est ta deuxième ligne de défense : même clé volée, l’attaquant est bloqué. Le seul « coût » est de la taper — et l’agent SSH (plus bas) le réduit à une fois par session.
Déposer ta clé publique sur le serveur
Pour que le serveur te reconnaisse, il doit connaître ta clé publique. Elle se range dans un fichier précis du compte distant :
~/.ssh/authorized_keys # sur le SERVEUR, dans le home de l'utilisateur vise (ex. deploy)La méthode simple : ssh-copy-id
ssh-copy-id deploy@203.0.113.10
# se connecte (par mot de passe cette premiere fois) et AJOUTE ta cle publique
# a ~/.ssh/authorized_keys du compte deploy, avec les bonnes permissionsssh-copy-id fait tout proprement : il crée ~/.ssh s’il manque, ajoute ta clé sans écraser les clés déjà présentes, et pose les bonnes permissions. C’est la voie recommandée. Ensuite, teste :
ssh deploy@203.0.113.10 # si tout est bon, tu entres SANS mot de passe (ou juste ta passphrase locale)La méthode manuelle (et le piège des permissions)
Si ssh-copy-id n’est pas disponible, tu peux le faire à la main. Il faut créer le dossier, y écrire ta clé publique, et — le point critique — poser des permissions strictes, sinon sshd refuse la clé (par sécurité) :
# sur le SERVEUR, connecte en tant que deploy :
mkdir -p ~/.ssh # cree le dossier si absent
chmod 700 ~/.ssh # SEUL le proprietaire peut lire/ecrire/traverser
# colle ta cle publique a la fin du fichier :
echo "ssh-ed25519 AAAAC3Nza... alex@formacampus" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys # SEUL le proprietaire peut lire/ecrireLes deux permissions à connaître par cœur :
| Chemin | Permission | Signification |
|---|---|---|
~/.ssh | 700 | Dossier accessible au seul propriétaire (rwx pour lui, rien pour les autres). |
~/.ssh/authorized_keys | 600 | Fichier lisible/modifiable par le seul propriétaire (rw, rien pour les autres). |
⚠️ Piège — Le grand classique : « j’ai copié ma clé, mais SSH me redemande quand même le mot de passe ». 9 fois sur 10, c’est les permissions. Si
~/.sshouauthorized_keyssont accessibles au groupe ou aux autres (ex.755,644),sshdconsidère le dossier comme non sûr et ignore silencieusement ta clé. Remetschmod 700 ~/.sshetchmod 600 ~/.ssh/authorized_keys. C’est aussi pour ça quessh-copy-idest préférable : il ne se trompe pas de permissions.
L’agent SSH : taper sa passphrase une seule fois
Une passphrase, c’est sûr — mais la retaper à chaque ssh, c’est pénible. L’agent SSH résout ça : c’est un petit programme qui garde ta clé déverrouillée en mémoire pour la durée de ta session. Tu déverrouilles une fois, il s’occupe du reste.
ssh-add ~/.ssh/id_ed25519
# demande ta passphrase UNE fois, puis charge la cle dans l'agent
# les connexions suivantes ne te la redemandent plus de la session
ssh-add -l
# -l -> liste les cles actuellement chargees dans l'agentSur la plupart des systèmes de bureau, l’ssh-agent démarre tout seul avec ta session. Sur macOS, le trousseau peut mémoriser la passphrase durablement ; sur Linux, l’agent est souvent lancé par l’environnement de bureau.
🐚 Au terminal — Le trio à retenir pour une session de travail confortable :
eval "$(ssh-agent -s)" # demarre l'agent si besoin (souvent deja lance)
ssh-add ~/.ssh/id_ed25519 # deverrouille la cle une fois pour la session
ssh deploy@203.0.113.10 # se connecte sans reclamer la passphraseLa règle absolue : ne jamais partager la clé privée
Ça mérite son propre encadré, parce que c’est l’erreur qui ruine tout :
🔒 Sécurité — Ta clé privée (
id_ed25519, sans.pub) ne se partage JAMAIS : pas par email, pas sur un Slack, pas dans un dépôt git, pas « juste pour dépanner un collègue ». Elle ne quitte pas ta machine. Si tu dois donner accès à quelqu’un d’autre, il génère sa propre paire et tu ajoutes sa clé publique dansauthorized_keys. Une clé privée qui a fuité est à considérer comme compromise : on la révoque (on retire la publique correspondante des serveurs) et on en régénère une neuve. La seule chose qu’on distribue, toujours, c’est le.pub.
Un mot sur les clés de déploiement (deploy keys)
Quand tu automatiseras le déploiement (Partie 13), ce n’est plus toi qui te connectes, mais un robot de CI (GitHub Actions) qui doit, par exemple, git pull sur le serveur ou pousser des fichiers. Pour ça, on utilise une clé de déploiement : une paire dédiée à cette automatisation, séparée de ta clé personnelle.
L’idée : la clé privée de déploiement vit dans les secrets de la CI (jamais dans le code), et sa portée est limitée (souvent en lecture seule, sur un seul dépôt ou serveur). Ainsi, si la CI est compromise, on révoque cette seule clé sans toucher à ton accès personnel ni à celui de l’équipe. On la met en place le moment venu — retiens juste le principe : une clé par usage, jamais une clé fourre-tout partagée.
🧭 Sur FormaCampus — Chaque membre de l’équipe FormaCampus génère sa propre paire
ed25519avec passphrase. On collecte les fichiers.pub(jamais les privées) et on les ajoute tous dans~/.ssh/authorized_keysdu comptedeploy. Résultat : Alex, Léa et Sami se connectent chacun avec sa clé au même utilisateurdeploy, et si l’un quitte l’équipe, on retire sa ligne du fichier — son accès disparaît, sans toucher aux autres. Plus tard, une clé de déploiement dédiée sera créée pour GitHub Actions, distincte des clés humaines.
✏️ Exercices
Exercice 1 — Génère et repère. Tu tapes ssh-keygen -t ed25519 -C "moi@laptop" et tu valides tout par défaut. Quels deux fichiers obtiens-tu, lequel est secret, et lequel copies-tu sur un serveur ?
✅ Solution
J’obtiens ~/.ssh/id_ed25519 (la clé privée, secrète, qui reste sur ma machine) et ~/.ssh/id_ed25519.pub (la clé publique). C’est le fichier .pub (public) que je copie sur le serveur, dans ~/.ssh/authorized_keys. La privée ne quitte jamais mon poste.
Exercice 2 — Débogue la clé ignorée. Tu as copié ta clé publique à la main sur le serveur, mais ssh te redemande le mot de passe à chaque fois. ls -l montre drwxr-xr-x sur ~/.ssh et -rw-r--r-- sur authorized_keys. Quel est le problème et comment le corriges-tu ?
✅ Solution
Les permissions sont trop ouvertes. drwxr-xr-x (755) et -rw-r--r-- (644) autorisent le groupe et les autres à lire ; sshd considère alors le setup comme non sûr et ignore la clé, d’où le retour au mot de passe. Correction : chmod 700 ~/.ssh (dossier au seul propriétaire) et chmod 600 ~/.ssh/authorized_keys (fichier au seul propriétaire). Après ça, la clé est prise en compte.
Exercice 3 — Un collègue rejoint l’équipe. Sami arrive et doit accéder au VPS via le compte deploy. Il te demande « tu peux m’envoyer ta clé ? ». Que réponds-tu, et quelle est la bonne procédure ?
✅ Solution
Je refuse de lui envoyer ma clé — surtout pas la privée, jamais partagée. La bonne procédure : Sami génère sa propre paire ed25519 (avec passphrase) sur sa machine, m’envoie uniquement son fichier .pub, et j’ajoute cette ligne dans ~/.ssh/authorized_keys du compte deploy (ou il le fait via ssh-copy-id s’il a un accès initial). Chacun a sa clé : si Sami part un jour, on retire sa ligne sans impacter les autres.
🧠 Quiz de révision
1. Quelle clé de la paire distribue-t-on, et laquelle ne sort jamais de ta machine ?
On distribue la clé publique (le fichier .pub), qu’on peut donner sans risque. La clé privée (le fichier sans .pub, ex. id_ed25519) reste secrète et sur ta machine : elle ne se partage jamais.
2. Quel type de clé recommande-t-on aujourd’hui, et quelle est l’alternative de compatibilité ?
On recommande ed25519 (moderne, court, rapide, très sûr). L’alternative, pour les vieux systèmes qui ne le gèrent pas, est RSA en 4096 bits (ssh-keygen -t rsa -b 4096).
3. Quelles permissions faut-il sur ~/.ssh et sur authorized_keys, et pourquoi ?
~/.ssh et sur authorized_keys, et pourquoi ?700 sur ~/.ssh (dossier accessible au seul propriétaire) et 600 sur authorized_keys (fichier lisible/modifiable par le seul propriétaire). Si c’est plus ouvert, sshd juge le setup non sûr et ignore la clé — d’où un retour au mot de passe.
4. À quoi sert la passphrase d’une clé, et à quoi sert l’agent SSH ?
La passphrase chiffre ta clé privée au repos sur ton disque : une clé volée reste inutilisable sans elle. L’agent SSH (ssh-agent + ssh-add) garde la clé déverrouillée en mémoire pour la session, pour ne taper la passphrase qu’une fois.
5. Pourquoi utiliser une clé de déploiement dédiée plutôt que ta clé personnelle pour la CI ?
Parce qu’on veut une clé par usage, à portée limitée (souvent lecture seule, un seul dépôt/serveur), stockée dans les secrets de la CI. Si la CI est compromise, on révoque cette seule clé sans toucher à ton accès personnel ni à celui de l’équipe.
Chapitre suivant : Config client & alias — pour taper ssh formacampus au lieu d’une longue ligne, et gérer plusieurs serveurs sans t’emmêler.