Générer la clé
Vérifiez d'abord si vous en avez déjà une avec ls ~/.ssh. Si id_ed25519.pub s'y trouve, passez directement à l'installation.
ssh-keygen -t ed25519 -C "you@laptop"
ssh-keygen pose deux questions :
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Enter passphrase for "/home/you/.ssh/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Appuyez sur Entrée pour accepter le fichier par défaut. Si une clé existe déjà à cet endroit, tapez un autre chemin, comme ~/.ssh/id_ed25519_work, au lieu de l'écraser.
Le texte après -C est un commentaire qui vous aide à reconnaître la clé. Toute personne qui voit la clé publique peut le lire : n'y mettez rien de privé. Depuis OpenSSH 9.5, un simple ssh-keygen crée aussi une clé Ed25519, mais -t ed25519 fonctionne avec toutes les versions.
Choisir une phrase secrète
La phrase secrète chiffre le fichier de la clé privée. Sans elle, quiconque copie le fichier peut l'utiliser. Avec elle, il lui faut aussi la phrase secrète. Vous pouvez l'ajouter ou la changer plus tard sans changer de clé :
ssh-keygen -p -f ~/.ssh/id_ed25519
Pour ne pas la taper à chaque connexion, chargez la clé dans ssh-agent, comme expliqué plus bas.
Installer la clé publique sur un serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
La commande se connecte une fois avec votre mot de passe, ajoute la clé publique à ~/.ssh/authorized_keys sur le serveur et règle les bonnes permissions. Si ssh-copy-id n'est pas disponible, faites la même chose à la main :
cat ~/.ssh/id_ed25519.pub | ssh user@server 'mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys'
Sous Windows, PowerShell n'a pas ssh-copy-id, et la clé se trouve dans votre profil utilisateur :
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Plus de détails dans ssh-copy-id sous Windows.
Tester la connexion
Cette commande n'essaie que les clés, elle ne réussit donc que si la clé fonctionne :
ssh -o PreferredAuthentications=publickey user@server
Ne testez pas avec -o PasswordAuthentication=no seul. Si le serveur autorise la connexion keyboard-interactive, il peut quand même vous demander votre mot de passe par ce biais, et vous croiriez que la clé a fonctionné.
En cas d'échec, consultez résoudre Permission denied (publickey).
Copier la clé publique pour GitHub et d'autres services
pbcopy < ~/.ssh/id_ed25519.pub # macOS
cat ~/.ssh/id_ed25519.pub # Linux: copy the output
Sous Windows, lancez Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub | Set-Clipboard. La clé publique tient sur une seule ligne qui commence par ssh-ed25519. Si vous voyez -----BEGIN OPENSSH PRIVATE KEY-----, vous avez ouvert la clé privée : ne la collez nulle part.
La suite pour GitHub se trouve dans comment ajouter une clé SSH à GitHub.
Ne plus taper la phrase secrète
ssh-agent garde la clé déverrouillée en mémoire pendant votre session :
ssh-add ~/.ssh/id_ed25519
ssh-add -l
Sur Mac, la phrase secrète peut aussi rester dans le Trousseau après un redémarrage : voir ssh-agent et le Trousseau macOS. Si ssh-add répond Could not open a connection to your authentication agent, aucun agent ne tourne dans ce shell : voir comment résoudre cette erreur.
Utiliser une clé avec un autre nom
ssh essaie tout seul les noms par défaut, comme id_ed25519. Pour une clé enregistrée sous un autre nom, indiquez-la une fois avec -i :
ssh -i ~/.ssh/id_ed25519_work user@server
Ou associez-la à ce serveur dans ~/.ssh/config, pour qu'un simple ssh myserver l'utilise :
Host myserver
HostName 203.0.113.10
User user
IdentityFile ~/.ssh/id_ed25519_work
IdentitiesOnly yes
Le reste de ce fichier est expliqué dans le guide du fichier de configuration SSH.
Pourquoi ed25519
Les clés Ed25519 sont courtes, rapides et prises en charge par toutes les versions d'OpenSSH depuis la 6.5, sortie en 2014. N'utilisez RSA que pour joindre un système ou un appareil ancien qui ne connaît pas ed25519, et alors avec au moins 3072 bits :
ssh-keygen -t rsa -b 4096 -C "you@laptop"
Pour une comparaison point par point, voir clés SSH RSA ou ed25519.
Afficher l'empreinte d'une clé
ssh-keygen -lf ~/.ssh/id_ed25519.pub
L'empreinte sert à vérifier que deux copies d'une clé sont identiques, par exemple la clé listée sur GitHub et celle de votre portable.
Questions
Où est stockée ma clé SSH ?
Dans le dossier .ssh de votre répertoire personnel : ~/.ssh sous macOS et Linux, et le dossier .ssh de votre profil utilisateur sous Windows. id_ed25519 est la clé privée et id_ed25519.pub la clé publique.
Ed25519 est-il meilleur que RSA ?
Pour une nouvelle clé, oui. Les clés Ed25519 sont plus courtes et plus rapides, et toutes les versions actuelles d'OpenSSH les prennent en charge. Gardez RSA, avec au moins 3072 bits, pour les vieux systèmes qui ne connaissent pas ed25519.
Faut-il les options -o et -a 100 des anciens tutoriels ?
Non. -o est acceptée mais ne fait plus rien : le format OpenSSH qu'elle demandait est celui par défaut depuis OpenSSH 7.8. -a fixe le nombre de tours qui protègent la phrase secrète, 16 par défaut. Un nombre plus élevé ralentit celui qui tente de la deviner, et rend le déverrouillage un peu plus lent pour vous.
J'ai oublié ma phrase secrète. Puis-je la récupérer ?
Non. Il n'existe aucun moyen de la lire ni de la réinitialiser. Générez une nouvelle clé, installez sa clé publique sur vos serveurs et retirez l'ancienne de leurs fichiers authorized_keys.
Puis-je utiliser la même clé sur plusieurs serveurs ?
Oui. La clé publique peut aller sur autant de serveurs que vous voulez. Utilisez des clés séparées là où vous voulez pouvoir retirer l'accès séparément, par exemple entre serveurs professionnels et personnels.
Sources
- ssh-keygen(1), manuel OpenBSD
- ssh-add(1), manuel OpenBSD
- ssh-copy-id(1), pages de manuel Linux
- Notes de version d'OpenSSH 9.5
- Notes de version d'OpenSSH 6.5