{"id":147,"date":"2026-06-14T16:26:46","date_gmt":"2026-06-14T16:26:46","guid":{"rendered":"https:\/\/shattered.io\/fr\/2026\/06\/14\/cle-ssh-ssh-keygen\/"},"modified":"2026-06-14T16:28:12","modified_gmt":"2026-06-14T16:28:12","slug":"cle-ssh-ssh-keygen","status":"publish","type":"post","link":"https:\/\/shattered.io\/fr\/2026\/06\/14\/cle-ssh-ssh-keygen\/","title":{"rendered":"Cl\u00e9 SSH : connexion sans mot de passe, 12 \u00e9tapes [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Le mot de passe SSH est le maillon faible de presque tous les serveurs Linux expos\u00e9s sur Internet. Les robots d&#8217;attaque par force brute frappent le port 22 en continu, et un seul identifiant devin\u00e9 ouvre l&#8217;acc\u00e8s complet \u00e0 la machine. L&#8217;authentification par <strong>cl\u00e9 SSH<\/strong> supprime ce risque : au lieu d&#8217;un secret partag\u00e9 que l&#8217;on tape, vous pr\u00e9sentez une preuve cryptographique qu&#8217;un serveur ne peut ni deviner ni rejouer. Ce tutoriel vous guide en 12 \u00e9tapes pour g\u00e9n\u00e9rer une cl\u00e9 SSH moderne avec <code>ssh-keygen<\/code>, la d\u00e9ployer sur vos serveurs, d\u00e9sactiver compl\u00e8tement les mots de passe et durcir le d\u00e9mon SSH selon les recommandations de l&#8217;ANSSI et de Mozilla.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Comptez environ 30 minutes pour la configuration de base, et 60 minutes si vous ajoutez le durcissement serveur et une cl\u00e9 mat\u00e9rielle FIDO2. Toutes les commandes ont \u00e9t\u00e9 test\u00e9es sur Ubuntu 26.04 LTS et Debian 13 \u00ab Trixie \u00bb avec OpenSSH 10.x, mais elles s&#8217;appliquent \u00e0 macOS, Windows 11 (OpenSSH int\u00e9gr\u00e9) et toute distribution Linux r\u00e9cente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pourquoi-abandonner-les-mots-de-passe-ssh-en-2026\">Pourquoi abandonner les mots de passe SSH en 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un mot de passe, m\u00eame long, reste un secret r\u00e9utilisable. S&#8217;il fuite via un keylogger, un d\u00e9p\u00f4t Git public ou une attaque par dictionnaire, l&#8217;attaquant obtient un acc\u00e8s direct. Une <strong>cl\u00e9 SSH<\/strong> fonctionne diff\u00e9remment. Vous g\u00e9n\u00e9rez une paire math\u00e9matiquement li\u00e9e : une cl\u00e9 priv\u00e9e qui ne quitte jamais votre poste, et une cl\u00e9 publique que vous distribuez librement. Le serveur stocke la cl\u00e9 publique et lance un d\u00e9fi cryptographique \u00e0 chaque connexion. Seul le d\u00e9tenteur de la cl\u00e9 priv\u00e9e peut y r\u00e9pondre. Aucun secret r\u00e9utilisable ne transite sur le r\u00e9seau.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;\u00e9cart de s\u00e9curit\u00e9 est mesurable. Une cl\u00e9 Ed25519 offre un niveau de r\u00e9sistance d&#8217;environ 128 bits, l&#8217;\u00e9quivalent d&#8217;un mot de passe al\u00e9atoire d&#8217;une trentaine de caract\u00e8res que personne ne pourrait m\u00e9moriser ni saisir. Les serveurs publics subissent des milliers de tentatives d&#8217;authentification par mot de passe chaque jour. En d\u00e9sactivant <code>PasswordAuthentication<\/code>, vous rendez ces attaques structurellement impossibles : il n&#8217;y a plus rien \u00e0 deviner.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les cl\u00e9s SSH apportent aussi du confort op\u00e9rationnel. Une fois la cl\u00e9 charg\u00e9e dans <code>ssh-agent<\/code>, vous ne tapez plus rien pour vous connecter. Vous automatisez les d\u00e9ploiements, les sauvegardes via <code>rsync<\/code> et les pipelines CI\/CD sans coller de mot de passe dans un script. Et contrairement \u00e0 un mot de passe partag\u00e9, chaque cl\u00e9 est nominative : vous r\u00e9voquez l&#8217;acc\u00e8s d&#8217;un d\u00e9veloppeur en supprimant une seule ligne du fichier <code>authorized_keys<\/code>, sans changer le secret de toute l&#8217;\u00e9quipe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;ANSSI, l&#8217;agence nationale fran\u00e7aise de cybers\u00e9curit\u00e9, recommande de longue date l&#8217;authentification par cl\u00e9 publique pour l&#8217;administration des syst\u00e8mes, et de proscrire l&#8217;acc\u00e8s direct du compte root. Les r\u00e9f\u00e9rentiels d&#8217;h\u00e9bergeurs europ\u00e9ens vont dans le m\u00eame sens : OVHcloud, Scaleway et Hetzner proposent tous le d\u00e9p\u00f4t d&#8217;une cl\u00e9 publique d\u00e8s la cr\u00e9ation d&#8217;une instance, pr\u00e9cis\u00e9ment pour \u00e9viter la phase \u00e0 risque o\u00f9 le serveur n&#8217;accepte qu&#8217;un mot de passe. Adopter les cl\u00e9s SSH n&#8217;est donc pas une coquetterie d&#8217;expert, c&#8217;est la configuration attendue d&#8217;un serveur de production en 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour aller plus loin sur la protection du port 22 contre les attaques r\u00e9siduelles, notre tutoriel <a href=\"\/fr\/fail2ban-proteger-ssh-tutoriel\/\">Fail2ban pour prot\u00e9ger SSH<\/a> compl\u00e8te parfaitement cette approche par cl\u00e9s. Les deux se combinent : la cl\u00e9 SSH supprime l&#8217;authentification par mot de passe, et Fail2ban bannit les adresses IP qui multiplient les sondages, ce qui all\u00e8ge vos journaux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"comment-fonctionne-lauthentification-par-cle-ssh\">Comment fonctionne l&#8217;authentification par cl\u00e9 SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;authentification par <strong>cl\u00e9 SSH<\/strong> repose sur la cryptographie asym\u00e9trique. La cl\u00e9 priv\u00e9e et la cl\u00e9 publique forment un couple indissociable. Ce qu&#8217;une cl\u00e9 signe, l&#8217;autre le v\u00e9rifie, mais on ne peut pas reconstruire la cl\u00e9 priv\u00e9e \u00e0 partir de la cl\u00e9 publique en un temps raisonnable. C&#8217;est cette asym\u00e9trie qui permet de publier la cl\u00e9 publique sans aucun risque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Voici le d\u00e9roul\u00e9 d&#8217;une connexion. Votre client SSH contacte le serveur et annonce qu&#8217;il souhaite s&#8217;authentifier avec une cl\u00e9. Le serveur consulte le fichier <code>~\/.ssh\/authorized_keys<\/code> de l&#8217;utilisateur cibl\u00e9 pour v\u00e9rifier qu&#8217;il conna\u00eet la cl\u00e9 publique correspondante. Si oui, un \u00e9change de d\u00e9fi-r\u00e9ponse a lieu : le serveur s&#8217;assure, via une signature num\u00e9rique, que le client d\u00e9tient bien la cl\u00e9 priv\u00e9e associ\u00e9e. Aucun moment de cet \u00e9change ne r\u00e9v\u00e8le la cl\u00e9 priv\u00e9e, et chaque session \u00e9tablit ses propres cl\u00e9s de chiffrement \u00e9ph\u00e9m\u00e8res.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un second m\u00e9canisme prot\u00e8ge l&#8217;autre sens de la relation : la cl\u00e9 d&#8217;h\u00f4te du serveur. Lors de votre toute premi\u00e8re connexion, le client affiche l&#8217;empreinte de la cl\u00e9 d&#8217;h\u00f4te et l&#8217;enregistre dans <code>~\/.ssh\/known_hosts<\/code>. Ce mod\u00e8le, appel\u00e9 \u00ab confiance \u00e0 la premi\u00e8re utilisation \u00bb (TOFU), garantit qu&#8217;aux connexions suivantes vous parlez bien au m\u00eame serveur. Si l&#8217;empreinte change sans raison, OpenSSH refuse net la connexion : c&#8217;est sa protection int\u00e9gr\u00e9e contre les attaques de l&#8217;intercepteur. V\u00e9rifiez toujours l&#8217;empreinte affich\u00e9e \u00e0 la premi\u00e8re connexion aupr\u00e8s de votre h\u00e9bergeur, qui la publie g\u00e9n\u00e9ralement dans son panneau de gestion.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pourquoi-ed25519-plutot-que-rsa\">Pourquoi Ed25519 plut\u00f4t que RSA<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH propose plusieurs algorithmes, mais en 2026 le choix par d\u00e9faut recommand\u00e9 est <strong>Ed25519<\/strong>. Cet algorithme de signature s&#8217;appuie sur la courbe elliptique Curve25519, con\u00e7ue par Daniel J. Bernstein. Il produit des cl\u00e9s de seulement 256 bits, soit une cl\u00e9 publique d&#8217;environ 68 caract\u00e8res, l\u00e0 o\u00f9 une cl\u00e9 RSA \u00e9quivalente exige 3072 ou 4096 bits. Ed25519 signe et v\u00e9rifie plus vite, r\u00e9siste aux attaques par canaux auxiliaires par conception, et son impl\u00e9mentation laisse peu de place aux erreurs de configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">RSA 4096 bits reste un choix valable pour les syst\u00e8mes anciens qui ne comprennent pas Ed25519, mais il devient l&#8217;exception. ECDSA souffre de la m\u00e9fiance autour des courbes NIST et d&#8217;une d\u00e9pendance critique \u00e0 la qualit\u00e9 de l&#8217;al\u00e9a lors de la signature. Quant \u00e0 DSA, OpenSSH 10.0 (avril 2025) a d\u00e9finitivement retir\u00e9 sa prise en charge : ne g\u00e9n\u00e9rez plus jamais de cl\u00e9 DSA. Notre r\u00e8gle simple : Ed25519 partout, RSA 4096 uniquement en cas d&#8217;incompatibilit\u00e9 av\u00e9r\u00e9e.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequis-et-versions-logicielles\">Pr\u00e9requis et versions logicielles<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de g\u00e9n\u00e9rer votre premi\u00e8re <strong>cl\u00e9 SSH<\/strong>, v\u00e9rifiez que votre environnement r\u00e9unit les \u00e9l\u00e9ments suivants. Le tableau pr\u00e9cise les versions utilis\u00e9es pour valider ce tutoriel en juin 2026.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u00c9l\u00e9ment<\/th><th>Version test\u00e9e<\/th><th>R\u00f4le<\/th><\/tr><\/thead><tbody><tr><td>OpenSSH (client et serveur)<\/td><td>10.x<\/td><td>G\u00e9n\u00e9ration de cl\u00e9s, connexion, d\u00e9mon sshd<\/td><\/tr><tr><td>Ubuntu Server<\/td><td>26.04 LTS<\/td><td>Serveur de d\u00e9monstration<\/td><\/tr><tr><td>Debian stable<\/td><td>13 \u00ab Trixie \u00bb<\/td><td>Alternative serveur<\/td><\/tr><tr><td>Noyau Linux<\/td><td>7.0<\/td><td>Base d&#8217;Ubuntu 26.04 LTS<\/td><\/tr><tr><td>Poste client<\/td><td>Linux, macOS 15+, Windows 11<\/td><td>L\u00e0 o\u00f9 r\u00e9side votre cl\u00e9 priv\u00e9e<\/td><\/tr><tr><td>Acc\u00e8s initial<\/td><td>mot de passe ou console<\/td><td>N\u00e9cessaire pour d\u00e9ployer la premi\u00e8re cl\u00e9<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Vous avez besoin d&#8217;un compte utilisateur sur le serveur cible et d&#8217;un acc\u00e8s initial pour y d\u00e9poser votre cl\u00e9 publique, que ce soit par mot de passe temporaire, par console du fournisseur cloud ou par une cl\u00e9 d\u00e9j\u00e0 en place. Sur Windows 11, OpenSSH est inclus mais parfois d\u00e9sactiv\u00e9 : activez la fonctionnalit\u00e9 \u00ab Client OpenSSH \u00bb dans les param\u00e8tres optionnels. Sur macOS, le client est pr\u00e9sent nativement dans le Terminal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-1-verifier-openssh-et-sa-version\">\u00c9tape 1 : V\u00e9rifier OpenSSH et sa version<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Commencez par confirmer qu&#8217;OpenSSH est install\u00e9 et suffisamment r\u00e9cent pour g\u00e9rer Ed25519. Ouvrez un terminal sur votre poste client et lancez la commande suivante.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -V\n# Sortie attendue (exemple) :\n# OpenSSH_10.0p1, OpenSSL 3.5.0 1 Apr 2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Toute version OpenSSH 6.5 ou sup\u00e9rieure prend en charge Ed25519, donc n&#8217;importe quel syst\u00e8me de 2026 convient largement. Si la commande renvoie une erreur sur Linux, installez le paquet avec <code>sudo apt install openssh-client<\/code>. C\u00f4t\u00e9 serveur, v\u00e9rifiez que le d\u00e9mon est pr\u00e9sent avec <code>sudo systemctl status ssh<\/code> sur Debian et Ubuntu (le service s&#8217;appelle parfois <code>sshd<\/code> sur d&#8217;autres distributions).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Profitez-en pour lister les cl\u00e9s d\u00e9j\u00e0 pr\u00e9sentes sur votre poste, afin de ne pas \u00e9craser une paire existante \u00e0 l&#8217;\u00e9tape suivante.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -al ~\/.ssh\n# Cherchez des fichiers comme id_ed25519, id_ed25519.pub,\n# id_rsa, id_rsa.pub. Le suffixe .pub designe la cle publique.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-2-generer-une-paire-de-cles-ed25519\">\u00c9tape 2 : G\u00e9n\u00e9rer une paire de cl\u00e9s Ed25519<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le c\u0153ur du tutoriel. La commande <code>ssh-keygen<\/code> cr\u00e9e votre paire de cl\u00e9s. Utilisez l&#8217;algorithme Ed25519, ajoutez un commentaire identifiant et renforcez la d\u00e9rivation de la phrase secr\u00e8te avec l&#8217;option <code>-a<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -a 100 -C \"sam@poste-bureau-2026\"\n\n# -t ed25519  : type d'algorithme (recommande)\n# -a 100      : 100 tours de derivation KDF pour proteger la cle privee\n# -C \"...\"    : commentaire libre, utile pour identifier la cle<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le programme vous pose deux questions. La premi\u00e8re porte sur l&#8217;emplacement du fichier : acceptez la valeur par d\u00e9faut <code>~\/.ssh\/id_ed25519<\/code> en appuyant sur Entr\u00e9e, sauf si vous g\u00e9rez plusieurs cl\u00e9s (voir l&#8217;\u00e9tape 11). La seconde demande une <strong>phrase secr\u00e8te<\/strong>. Saisissez-en une, robuste et m\u00e9morisable. Elle chiffre la cl\u00e9 priv\u00e9e sur le disque : si votre ordinateur est vol\u00e9, le voleur ne pourra pas utiliser la cl\u00e9 sans cette phrase.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generating public\/private ed25519 key pair.\nEnter file in which to save the key (\/home\/sam\/.ssh\/id_ed25519):\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in \/home\/sam\/.ssh\/id_ed25519\nYour public key has been saved in \/home\/sam\/.ssh\/id_ed25519.pub\nThe key fingerprint is:\nSHA256:8Hq2k...exemple...9fJ sam@poste-bureau-2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;image \u00ab randomart \u00bb affich\u00e9e \u00e0 la fin est une repr\u00e9sentation visuelle de l&#8217;empreinte. Elle aide \u00e0 rep\u00e9rer d&#8217;un coup d&#8217;\u0153il un changement de cl\u00e9 inattendu. Ne sautez jamais l&#8217;\u00e9tape de la phrase secr\u00e8te sur un poste de travail : une cl\u00e9 priv\u00e9e sans phrase secr\u00e8te \u00e9quivaut \u00e0 un mot de passe \u00e9crit en clair sur votre disque.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-3-comprendre-les-fichiers-generes\">\u00c9tape 3 : Comprendre les fichiers g\u00e9n\u00e9r\u00e9s<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ssh-keygen<\/code> a cr\u00e9\u00e9 deux fichiers dans <code>~\/.ssh<\/code>. Comprendre leur r\u00f4le \u00e9vite la plupart des erreurs de d\u00e9butant, notamment le partage accidentel de la cl\u00e9 priv\u00e9e.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>id_ed25519<\/strong> : votre cl\u00e9 priv\u00e9e. Elle ne quitte jamais votre poste. Ne la copiez nulle part, ne l&#8217;envoyez par aucun canal, ne la versionnez dans aucun d\u00e9p\u00f4t Git.<\/li><li><strong>id_ed25519.pub<\/strong> : votre cl\u00e9 publique. C&#8217;est elle que vous d\u00e9ployez sur les serveurs. Elle peut circuler librement, par e-mail, dans un ticket ou un d\u00e9p\u00f4t.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Affichez le contenu de la cl\u00e9 publique. Elle tient sur une seule ligne et commence par le pr\u00e9fixe <code>ssh-ed25519<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/id_ed25519.pub\n# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8q...exemple...k9fJ sam@poste-bureau-2026<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Les permissions de fichiers comptent. OpenSSH refuse d&#8217;utiliser une cl\u00e9 priv\u00e9e trop ouverte. Le dossier <code>~\/.ssh<\/code> doit \u00eatre en 700 et la cl\u00e9 priv\u00e9e en 600. <code>ssh-keygen<\/code> applique ces permissions automatiquement, mais apr\u00e8s une copie ou une restauration de sauvegarde, corrigez-les avec <code>chmod 700 ~\/.ssh<\/code> puis <code>chmod 600 ~\/.ssh\/id_ed25519<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-4-copier-la-cle-publique-sur-le-serveur\">\u00c9tape 4 : Copier la cl\u00e9 publique sur le serveur<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour autoriser votre <strong>cl\u00e9 SSH<\/strong>, le serveur doit conna\u00eetre votre cl\u00e9 publique. La m\u00e9thode la plus simple est <code>ssh-copy-id<\/code>, qui ajoute proprement la cl\u00e9 au fichier <code>~\/.ssh\/authorized_keys<\/code> du compte distant.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-copy-id -i ~\/.ssh\/id_ed25519.pub sam@203.0.113.10\n# Le serveur demande votre mot de passe une derniere fois,\n# puis enregistre la cle publique dans ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>ssh-copy-id<\/code> n&#8217;est pas disponible, par exemple sur Windows, d\u00e9ployez la cl\u00e9 manuellement. La commande ci-dessous fonctionne depuis n&#8217;importe quel poste disposant du client SSH.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/id_ed25519.pub | ssh sam@203.0.113.10 \\\n  \"mkdir -p ~\/.ssh &amp;&amp; chmod 700 ~\/.ssh &amp;&amp; \\\n   cat &gt;&gt; ~\/.ssh\/authorized_keys &amp;&amp; chmod 600 ~\/.ssh\/authorized_keys\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Cette commande cr\u00e9e le dossier <code>~\/.ssh<\/code> si besoin, applique les bonnes permissions et ajoute votre cl\u00e9 publique en fin de fichier <code>authorized_keys<\/code> sans \u00e9craser les cl\u00e9s d\u00e9j\u00e0 pr\u00e9sentes. Chez un fournisseur cloud, vous pouvez aussi coller la cl\u00e9 publique dans la console web lors de la cr\u00e9ation de l&#8217;instance, ce qui \u00e9vite tout acc\u00e8s par mot de passe d\u00e8s le d\u00e9part.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-5-tester-la-connexion-par-cle\">\u00c9tape 5 : Tester la connexion par cl\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de d\u00e9sactiver les mots de passe, v\u00e9rifiez que la connexion par <strong>cl\u00e9 SSH<\/strong> fonctionne. C&#8217;est l&#8217;\u00e9tape de s\u00e9curit\u00e9 la plus importante : ne coupez jamais l&#8217;authentification par mot de passe tant que vous n&#8217;avez pas confirm\u00e9 un acc\u00e8s par cl\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh sam@203.0.113.10\n# Si une phrase secrete protege la cle, le client la demande\n# (et non le serveur). Vous arrivez ensuite sur le shell distant.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si la connexion r\u00e9ussit sans demander de mot de passe serveur, l&#8217;authentification par cl\u00e9 est op\u00e9rationnelle. En cas de doute, lancez le mode verbeux pour voir exactement quelle m\u00e9thode SSH tente et laquelle r\u00e9ussit.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -v sam@203.0.113.10\n# Cherchez les lignes :\n# debug1: Offering public key: \/home\/sam\/.ssh\/id_ed25519 ED25519\n# debug1: Server accepts key: ...\n# debug1: Authentication succeeded (publickey).<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La ligne <code>Authentication succeeded (publickey)<\/code> confirme que tout est en place. Gardez cette session ouverte pendant le durcissement du serveur : elle vous servira de filet de s\u00e9curit\u00e9 si une mauvaise configuration vous verrouille \u00e0 l&#8217;\u00e9tape 8.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-6-charger-la-cle-dans-ssh-agent\">\u00c9tape 6 : Charger la cl\u00e9 dans ssh-agent<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Taper la phrase secr\u00e8te \u00e0 chaque connexion devient vite p\u00e9nible. L&#8217;agent SSH garde la cl\u00e9 d\u00e9chiffr\u00e9e en m\u00e9moire pour la dur\u00e9e de votre session, ce qui combine s\u00e9curit\u00e9 au repos et confort d&#8217;usage. Lancez l&#8217;agent puis ajoutez votre cl\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Demarrer l'agent (souvent deja actif sur les bureaux Linux et macOS)\neval \"$(ssh-agent -s)\"\n# Agent pid 4521\n\n# Ajouter la cle : la phrase secrete est demandee une seule fois\nssh-add ~\/.ssh\/id_ed25519\n# Identity added: \/home\/sam\/.ssh\/id_ed25519 (sam@poste-bureau-2026)\n\n# Verifier les cles chargees\nssh-add -l<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur macOS, ajoutez l&#8217;option <code>--apple-use-keychain<\/code> \u00e0 <code>ssh-add<\/code> pour stocker la phrase secr\u00e8te dans le trousseau et la recharger automatiquement \u00e0 chaque d\u00e9marrage. Sur Linux, les bureaux GNOME et KDE int\u00e8grent un agent qui propose de m\u00e9moriser la phrase. Pour une session purement automatis\u00e9e (CI\/CD), pr\u00e9f\u00e9rez une cl\u00e9 d\u00e9di\u00e9e sans phrase secr\u00e8te, \u00e0 droits restreints, plut\u00f4t que de d\u00e9sactiver la protection de votre cl\u00e9 personnelle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-7-simplifier-les-acces-avec-ssh-config\">\u00c9tape 7 : Simplifier les acc\u00e8s avec ~\/.ssh\/config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>~\/.ssh\/config<\/code> transforme des commandes longues en alias courts. Au lieu de retenir adresses IP, ports et noms d&#8217;utilisateur, vous d\u00e9finissez chaque h\u00f4te une fois. Cr\u00e9ez ou \u00e9ditez ce fichier sur votre poste client.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ~\/.ssh\/config\n\nHost prod\n    HostName 203.0.113.10\n    User sam\n    Port 2222\n    IdentityFile ~\/.ssh\/id_ed25519\n    IdentitiesOnly yes\n\nHost *\n    AddKeysToAgent yes\n    ServerAliveInterval 60\n    HashKnownHosts yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9sormais, <code>ssh prod<\/code> suffit pour vous connecter avec le bon utilisateur, le bon port et la bonne cl\u00e9. L&#8217;option <code>IdentitiesOnly yes<\/code> \u00e9vite que le client propose toutes vos cl\u00e9s \u00e0 la suite, ce qui peut d\u00e9clencher un blocage temporaire du serveur apr\u00e8s trop de tentatives. <code>AddKeysToAgent yes<\/code> charge la cl\u00e9 dans l&#8217;agent \u00e0 la premi\u00e8re utilisation. Appliquez la permission 600 au fichier avec <code>chmod 600 ~\/.ssh\/config<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-8-desactiver-les-mots-de-passe-cote-serveur\">\u00c9tape 8 : D\u00e9sactiver les mots de passe c\u00f4t\u00e9 serveur<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vous avez confirm\u00e9 l&#8217;acc\u00e8s par cl\u00e9. Il est temps de fermer la porte aux attaques par mot de passe. Toutes les modifications se font dans le fichier de configuration du d\u00e9mon, <code>\/etc\/ssh\/sshd_config<\/code>, ou mieux, dans un fichier d\u00e9di\u00e9 sous <code>\/etc\/ssh\/sshd_config.d\/<\/code>. Cette seconde approche survit aux mises \u00e0 jour de paquet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Creer un fichier de durcissement dedie\nsudo nano \/etc\/ssh\/sshd_config.d\/99-durcissement.conf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Renseignez les directives suivantes. Elles imposent l&#8217;authentification par cl\u00e9, interdisent la connexion root par mot de passe et coupent les m\u00e9canismes inutiles.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/ssh\/sshd_config.d\/99-durcissement.conf\n\nPubkeyAuthentication yes\nPasswordAuthentication no\nKbdInteractiveAuthentication no\nChallengeResponseAuthentication no\nPermitRootLogin prohibit-password\nPermitEmptyPasswords no\nUsePAM yes\nMaxAuthTries 3\nLoginGraceTime 20<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de recharger, validez la syntaxe avec <code>sudo sshd -t<\/code>. Si la commande ne renvoie rien, la configuration est correcte. Rechargez ensuite le service sans couper votre session active.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sshd -t              # test de syntaxe, aucune sortie = OK\nsudo systemctl reload ssh # appliquer sans tuer les sessions ouvertes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ouvrez maintenant une <strong>nouvelle<\/strong> fen\u00eatre de terminal et reconnectez-vous. Si l&#8217;acc\u00e8s par cl\u00e9 fonctionne toujours et qu&#8217;une tentative de mot de passe est refus\u00e9e, le durcissement est r\u00e9ussi. Gardez l&#8217;ancienne session ouverte jusqu&#8217;\u00e0 cette confirmation : c&#8217;est votre garantie contre un verrouillage accidentel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-9-restreindre-utilisateurs-port-et-ecoute\">\u00c9tape 9 : Restreindre utilisateurs, port et \u00e9coute<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Au-del\u00e0 des cl\u00e9s, vous pouvez r\u00e9duire encore la surface d&#8217;attaque. Limitez les comptes autoris\u00e9s \u00e0 se connecter en SSH, et choisissez d&#8217;\u00e9couter sur une interface pr\u00e9cise. Ajoutez ces directives au m\u00eame fichier de durcissement.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Restreindre l'acces SSH a des comptes nommes\nAllowUsers sam deploy\n\n# Ecouter uniquement sur l'IPv4 publique (exemple)\n# ListenAddress 203.0.113.10\n\n# Changer le port par defaut reduit le bruit des robots\n# Port 2222<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Changer le port de 22 vers une valeur comme 2222 n&#8217;est pas une mesure de s\u00e9curit\u00e9 au sens strict, car un scan de ports le retrouve, mais cela r\u00e9duit fortement le volume de journaux et les tentatives automatis\u00e9es. Si vous modifiez le port, pensez \u00e0 l&#8217;ouvrir dans votre pare-feu : <code>sudo ufw allow 2222\/tcp<\/code> puis <code>sudo ufw delete allow 22\/tcp<\/code> une fois la nouvelle configuration confirm\u00e9e. Sur les distributions r\u00e9centes utilisant l&#8217;activation par socket, configurez plut\u00f4t le port via <code>systemctl edit ssh.socket<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour un serveur expos\u00e9, associez ces r\u00e9glages \u00e0 un pare-feu et \u00e0 un certificat valide si vous y h\u00e9bergez des services web. Notre guide <a href=\"\/fr\/certificat-ssl-certbot-nginx\/\">certificat SSL gratuit avec Certbot<\/a> couvre le volet HTTPS de cette m\u00eame machine.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-10-choisir-des-algorithmes-modernes\">\u00c9tape 10 : Choisir des algorithmes modernes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les versions r\u00e9centes d&#8217;OpenSSH retiennent d\u00e9j\u00e0 de bons algorithmes par d\u00e9faut, mais vous pouvez verrouiller la liste pour interdire les primitives anciennes. Les recommandations de Mozilla pour OpenSSH servent de r\u00e9f\u00e9rence solide. Ajoutez ces lignes au fichier de durcissement serveur si vous voulez un contr\u00f4le explicite.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Algorithmes d'echange de cles, chiffrements et MAC modernes\nKexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org\nCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com\nHostKeyAlgorithms ssh-ed25519,rsa-sha2-512<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ces r\u00e9glages garantissent l&#8217;usage de Curve25519 pour l&#8217;\u00e9change de cl\u00e9s, ChaCha20-Poly1305 ou AES-256-GCM pour le chiffrement, et des MAC en mode \u00ab encrypt-then-MAC \u00bb plus robustes. Testez toujours avec <code>sudo sshd -t<\/code> avant de recharger : une faute de frappe dans la liste des chiffrements peut rendre le serveur inaccessible. Si un client ancien ne parvient plus \u00e0 se connecter, \u00e9largissez prudemment la liste plut\u00f4t que de la supprimer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-11-gerer-plusieurs-cles-et-la-rotation\">\u00c9tape 11 : G\u00e9rer plusieurs cl\u00e9s et la rotation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beaucoup d&#8217;utilisateurs s\u00e9parent leurs <strong>cl\u00e9s SSH<\/strong> par usage : une pour le travail, une pour les projets personnels, une pour GitHub. G\u00e9n\u00e9rez une cl\u00e9 nomm\u00e9e explicitement et d\u00e9clarez-la dans <code>~\/.ssh\/config<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Generer une cle dediee a GitHub\nssh-keygen -t ed25519 -a 100 -f ~\/.ssh\/id_ed25519_github -C \"github-sam\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># ~\/.ssh\/config : associer chaque hote a la bonne cle\nHost github.com\n    HostName github.com\n    User git\n    IdentityFile ~\/.ssh\/id_ed25519_github\n    IdentitiesOnly yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La rotation des cl\u00e9s est une bonne hygi\u00e8ne. Pour remplacer une cl\u00e9 compromise ou ancienne, g\u00e9n\u00e9rez-en une nouvelle, d\u00e9ployez la nouvelle cl\u00e9 publique avec <code>ssh-copy-id<\/code>, confirmez l&#8217;acc\u00e8s, puis supprimez l&#8217;ancienne ligne du fichier <code>authorized_keys<\/code> sur chaque serveur. Tenez un inventaire de vos cl\u00e9s : savoir quelle cl\u00e9 donne acc\u00e8s \u00e0 quoi est indispensable le jour o\u00f9 un poste est perdu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-12-renforcer-avec-une-cle-materielle-fido2\">\u00c9tape 12 : Renforcer avec une cl\u00e9 mat\u00e9rielle FIDO2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le niveau de s\u00e9curit\u00e9 sup\u00e9rieur consiste \u00e0 ancrer la <strong>cl\u00e9 SSH<\/strong> dans un jeton mat\u00e9riel comme une YubiKey ou tout authentifiant FIDO2. La partie sensible de la cl\u00e9 ne r\u00e9side alors plus sur le disque mais dans la puce du jeton, et chaque connexion exige une pr\u00e9sence physique (un appui sur le bouton). OpenSSH g\u00e8re cela depuis la version 8.2 via les types de cl\u00e9s <code>ed25519-sk<\/code> et <code>ecdsa-sk<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Brancher la cle materielle, puis generer une cle ancree au jeton\nssh-keygen -t ed25519-sk -a 100 -C \"yubikey-sam\"\n# Touchez le jeton lorsque la diode clignote.\n# Deux fichiers sont crees : id_ed25519_sk et id_ed25519_sk.pub<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9ployez ensuite <code>id_ed25519_sk.pub<\/code> exactement comme une cl\u00e9 classique, avec <code>ssh-copy-id<\/code>. \u00c0 chaque connexion, le serveur exigera la pr\u00e9sence du jeton et un appui physique. C&#8217;est la d\u00e9fense la plus efficace contre le vol de cl\u00e9 \u00e0 distance : m\u00eame un attaquant qui copie le fichier de cl\u00e9 ne peut rien faire sans le jeton. Pour les sauvegardes critiques, conservez un second jeton FIDO2 enregistr\u00e9 en parall\u00e8le, afin de ne pas perdre tout acc\u00e8s en cas de perte du premier.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"deployer-les-cles-ssh-en-equipe-et-a-grande-echelle\">D\u00e9ployer les cl\u00e9s SSH en \u00e9quipe et \u00e0 grande \u00e9chelle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00e9rer une <strong>cl\u00e9 SSH<\/strong> sur un serveur est simple. G\u00e9rer les acc\u00e8s de dix personnes sur cinquante machines exige de la m\u00e9thode. La r\u00e8gle d&#8217;or : chaque membre poss\u00e8de sa propre paire de cl\u00e9s et ne partage jamais sa cl\u00e9 priv\u00e9e. Vous centralisez uniquement les cl\u00e9s publiques, par exemple dans un d\u00e9p\u00f4t Git d&#8217;infrastructure, puis vous les distribuez avec un outil de gestion de configuration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ansible illustre bien cette approche. Le module <code>ansible.posix.authorized_key<\/code> ajoute ou retire une cl\u00e9 publique sur un parc entier en une seule ex\u00e9cution. Vous d\u00e9crivez l&#8217;\u00e9tat souhait\u00e9 (telle cl\u00e9 pr\u00e9sente, telle cl\u00e9 absente) et l&#8217;outil l&#8217;applique partout de fa\u00e7on idempotente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- name: Autoriser la cle de Sam sur les serveurs web\n  ansible.posix.authorized_key:\n    user: deploy\n    state: present\n    key: \"{{ lookup('file', 'cles\/sam_ed25519.pub') }}\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les organisations plus grandes, les certificats SSH constituent l&#8217;\u00e9tape suivante. Plut\u00f4t que de copier chaque cl\u00e9 publique sur chaque serveur, une autorit\u00e9 de certification SSH signe les cl\u00e9s des utilisateurs pour une dur\u00e9e limit\u00e9e. Les serveurs font confiance \u00e0 l&#8217;autorit\u00e9, pas \u00e0 chaque cl\u00e9 individuelle, ce qui supprime la gestion manuelle de <code>authorized_keys<\/code> et offre une r\u00e9vocation imm\u00e9diate \u00e0 l&#8217;expiration. Des solutions comme HashiCorp Vault ou Teleport automatisent ce flux, mais la base reste la m\u00eame paire de cl\u00e9s Ed25519 que vous avez g\u00e9n\u00e9r\u00e9e \u00e0 l&#8217;\u00e9tape 2.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"comparatif-des-types-de-cles-ssh\">Comparatif des types de cl\u00e9s SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le choix de l&#8217;algorithme conditionne la s\u00e9curit\u00e9 et la compatibilit\u00e9 de votre <strong>cl\u00e9 SSH<\/strong>. Ce tableau r\u00e9sume les options disponibles avec OpenSSH en 2026.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Type<\/th><th>Taille<\/th><th>S\u00e9curit\u00e9<\/th><th>Recommandation 2026<\/th><\/tr><\/thead><tbody><tr><td>Ed25519<\/td><td>256 bits<\/td><td>~128 bits, rapide, courbe Curve25519<\/td><td>Choix par d\u00e9faut, \u00e0 privil\u00e9gier<\/td><\/tr><tr><td>Ed25519-sk<\/td><td>256 bits + jeton<\/td><td>Cl\u00e9 ancr\u00e9e au mat\u00e9riel FIDO2<\/td><td>Id\u00e9al pour les acc\u00e8s critiques<\/td><\/tr><tr><td>RSA 4096<\/td><td>4096 bits<\/td><td>Solide mais lent, cl\u00e9s volumineuses<\/td><td>Compatibilit\u00e9 syst\u00e8mes anciens<\/td><\/tr><tr><td>ECDSA<\/td><td>256-521 bits<\/td><td>D\u00e9pend des courbes NIST et de l&#8217;al\u00e9a<\/td><td>\u00c0 \u00e9viter sauf contrainte<\/td><\/tr><tr><td>DSA<\/td><td>1024 bits<\/td><td>Obsol\u00e8te, retir\u00e9 d&#8217;OpenSSH 10.0<\/td><td>Ne plus jamais utiliser<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En r\u00e9sum\u00e9 : Ed25519 pour l&#8217;usage courant, Ed25519-sk avec jeton mat\u00e9riel pour les serveurs sensibles, et RSA 4096 seulement face \u00e0 un \u00e9quipement qui ne comprend rien d&#8217;autre. ECDSA et DSA appartiennent au pass\u00e9. Cette logique rejoint nos principes sur les bonnes pratiques d\u00e9taill\u00e9es dans notre dossier <a href=\"\/fr\/securite-des-mots-de-passe\/\">s\u00e9curit\u00e9 des mots de passe<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5-pieges-courants-a-eviter\">5 pi\u00e8ges courants \u00e0 \u00e9viter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ces erreurs reviennent sans cesse dans les configurations SSH. Les conna\u00eetre vous \u00e9pargnera des heures de d\u00e9bogage et, surtout, un verrouillage hors de votre propre serveur.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>D\u00e9sactiver les mots de passe avant de tester la cl\u00e9.<\/strong> Si l&#8217;acc\u00e8s par cl\u00e9 \u00e9choue apr\u00e8s la coupure, vous perdez tout acc\u00e8s SSH. Confirmez toujours une connexion par cl\u00e9 dans une seconde session avant de recharger <code>sshd<\/code>.<\/li><li><strong>Partager ou versionner la cl\u00e9 priv\u00e9e.<\/strong> La cl\u00e9 priv\u00e9e ne quitte jamais votre poste. Une cl\u00e9 pouss\u00e9e dans un d\u00e9p\u00f4t Git, m\u00eame priv\u00e9, doit \u00eatre consid\u00e9r\u00e9e comme compromise et r\u00e9voqu\u00e9e imm\u00e9diatement.<\/li><li><strong>Permissions trop larges sur ~\/.ssh.<\/strong> OpenSSH ignore une cl\u00e9 priv\u00e9e lisible par d&#8217;autres utilisateurs et un fichier <code>authorized_keys<\/code> modifiable par le groupe. Respectez 700 pour le dossier, 600 pour les fichiers.<\/li><li><strong>G\u00e9n\u00e9rer une cl\u00e9 sans phrase secr\u00e8te sur un poste personnel.<\/strong> Une cl\u00e9 en clair sur disque est exploitable telle quelle en cas de vol. R\u00e9servez les cl\u00e9s sans phrase aux comptes de service isol\u00e9s et \u00e0 droits limit\u00e9s.<\/li><li><strong>Oublier d&#8217;ouvrir le nouveau port dans le pare-feu.<\/strong> Changer le port SSH sans ajuster <code>ufw<\/code> ou <code>nftables<\/code> bloque la prochaine connexion. Ouvrez le nouveau port avant de fermer l&#8217;ancien.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"depannage-8-erreurs-frequentes\">D\u00e9pannage : 8 erreurs fr\u00e9quentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Voici les messages d&#8217;erreur les plus courants li\u00e9s aux <strong>cl\u00e9s SSH<\/strong> et leur r\u00e9solution. Lancez toujours <code>ssh -v<\/code> pour obtenir le d\u00e9tail de la n\u00e9gociation avant de conclure.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Sympt\u00f4me<\/th><th>Cause probable<\/th><th>Solution<\/th><\/tr><\/thead><tbody><tr><td>Permission denied (publickey)<\/td><td>Cl\u00e9 non d\u00e9ploy\u00e9e ou mauvais compte<\/td><td>V\u00e9rifier <code>authorized_keys<\/code> et l&#8217;utilisateur cible<\/td><\/tr><tr><td>Le serveur demande encore un mot de passe<\/td><td>Cl\u00e9 non propos\u00e9e par le client<\/td><td>Ajouter <code>IdentityFile<\/code> dans <code>~\/.ssh\/config<\/code><\/td><\/tr><tr><td>WARNING: UNPROTECTED PRIVATE KEY FILE<\/td><td>Permissions trop ouvertes<\/td><td><code>chmod 600 ~\/.ssh\/id_ed25519<\/code><\/td><\/tr><tr><td>Authentications that can continue: password<\/td><td>Pubkey refus\u00e9e c\u00f4t\u00e9 serveur<\/td><td>Contr\u00f4ler permissions de <code>~\/.ssh<\/code> distant (700)<\/td><\/tr><tr><td>Could not open a connection to your agent<\/td><td>ssh-agent non d\u00e9marr\u00e9<\/td><td><code>eval \"$(ssh-agent -s)\"<\/code> puis <code>ssh-add<\/code><\/td><\/tr><tr><td>Too many authentication failures<\/td><td>Trop de cl\u00e9s propos\u00e9es<\/td><td>Ajouter <code>IdentitiesOnly yes<\/code><\/td><\/tr><tr><td>Host key verification failed<\/td><td>Empreinte serveur chang\u00e9e<\/td><td>V\u00e9rifier l&#8217;h\u00f4te, corriger <code>~\/.ssh\/known_hosts<\/code><\/td><\/tr><tr><td>sign_and_send_pubkey: signing failed<\/td><td>Jeton FIDO2 absent ou agent fig\u00e9<\/td><td>Rebrancher le jeton, relancer l&#8217;agent<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour l&#8217;erreur \u00ab Host key verification failed \u00bb, prudence. Elle signifie que la cl\u00e9 d&#8217;h\u00f4te du serveur a chang\u00e9 depuis votre derni\u00e8re connexion. C&#8217;est parfois l\u00e9gitime (r\u00e9installation), mais cela peut aussi trahir une attaque de l&#8217;intercepteur. Confirmez l&#8217;empreinte par un canal ind\u00e9pendant avant de supprimer l&#8217;ancienne ligne de <code>known_hosts<\/code> avec <code>ssh-keygen -R 203.0.113.10<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous \u00eates verrouill\u00e9 hors du serveur apr\u00e8s le durcissement, la console de secours du fournisseur cloud (KVM ou \u00ab rescue mode \u00bb) reste votre porte de sortie. Connectez-vous par la console, corrigez <code>\/etc\/ssh\/sshd_config.d\/99-durcissement.conf<\/code>, testez avec <code>sshd -t<\/code>, puis rechargez le service.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"astuces-avancees-pour-aller-plus-loin\">Astuces avanc\u00e9es pour aller plus loin<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"restreindre-une-cle-a-une-seule-commande\">Restreindre une cl\u00e9 \u00e0 une seule commande<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour une cl\u00e9 de sauvegarde ou de d\u00e9ploiement, limitez-la \u00e0 une commande pr\u00e9cise directement dans <code>authorized_keys<\/code>. La cl\u00e9 ne pourra rien faire d&#8217;autre, m\u00eame si elle fuite.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Dans ~\/.ssh\/authorized_keys du serveur :\ncommand=\"\/usr\/local\/bin\/sauvegarde.sh\",no-port-forwarding,no-pty ssh-ed25519 AAAA...cle... backup<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"auditer-les-connexions-par-cle\">Auditer les connexions par cl\u00e9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Savoir qui se connecte, quand et avec quelle cl\u00e9 fait partie d&#8217;une bonne hygi\u00e8ne. Le journal syst\u00e8me enregistre chaque authentification r\u00e9ussie ou refus\u00e9e. Sur Ubuntu et Debian, consultez-le avec <code>journalctl<\/code> ou le fichier d&#8217;authentification.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Voir les connexions SSH acceptees et refusees\nsudo journalctl -u ssh --since \"today\" | grep -i \"Accepted\\|Failed\"\n\n# Lister les dernieres connexions reussies\nlast -a | head<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour tracer pr\u00e9cis\u00e9ment quelle cl\u00e9 a servi, ajoutez <code>LogLevel VERBOSE<\/code> au fichier de durcissement : OpenSSH journalisera alors l&#8217;empreinte SHA256 de la cl\u00e9 utilis\u00e9e \u00e0 chaque connexion. Crois\u00e9 avec votre inventaire de cl\u00e9s, ce d\u00e9tail permet d&#8217;identifier nominativement chaque acc\u00e8s, un atout pr\u00e9cieux lors d&#8217;un audit ou d&#8217;une r\u00e9ponse \u00e0 incident.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"rebondir-via-un-hote-bastion\">Rebondir via un h\u00f4te bastion<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pour atteindre un serveur interne sans l&#8217;exposer \u00e0 Internet, passez par un h\u00f4te bastion gr\u00e2ce \u00e0 la directive <code>ProxyJump<\/code>. La cl\u00e9 n&#8217;est jamais d\u00e9pos\u00e9e sur le bastion : l&#8217;agent fait suivre l&#8217;authentification de bout en bout.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># ~\/.ssh\/config\nHost interne\n    HostName 10.0.0.5\n    User sam\n    ProxyJump bastion\n\nHost bastion\n    HostName 203.0.113.10\n    User sam\n    IdentityFile ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c9vitez l&#8217;option <code>ForwardAgent yes<\/code> par d\u00e9faut : elle expose votre agent sur le serveur distant. Pr\u00e9f\u00e9rez <code>ProxyJump<\/code>, qui ne partage jamais vos cl\u00e9s avec les machines interm\u00e9diaires. Pour relier des sites distants par un tunnel chiffr\u00e9 complet, notre tutoriel <a href=\"\/fr\/vpn-wireguard-linux\/\">VPN WireGuard sur Linux<\/a> propose une alternative au rebond SSH.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"et-la-cryptographie-post-quantique\">Et la cryptographie post-quantique ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 repose sur des courbes elliptiques classiques, vuln\u00e9rables en th\u00e9orie \u00e0 un futur ordinateur quantique. OpenSSH a d\u00e9j\u00e0 commenc\u00e9 \u00e0 int\u00e9grer des \u00e9changes de cl\u00e9s hybrides post-quantiques pour la couche de transport, et des projets comme Rosenpass ajoutent une couche d&#8217;\u00e9tablissement de cl\u00e9s r\u00e9sistante au quantique devant le tunnel. Pour la signature d&#8217;authentification, Ed25519 reste s\u00fbr face aux menaces actuelles. Surveillez les notes de version d&#8217;OpenSSH pour les \u00e9volutions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"projet-complet-du-poste-au-serveur-durci\">Projet complet : du poste au serveur durci<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9capitulons l&#8217;ensemble du projet sous forme d&#8217;une s\u00e9quence reproductible. Adaptez l&#8217;adresse IP, le nom d&#8217;utilisateur et le port \u00e0 votre environnement.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># === Sur le poste client ===\n# 1. Generer la cle Ed25519 protegee par phrase secrete\nssh-keygen -t ed25519 -a 100 -C \"sam@poste-bureau-2026\"\n\n# 2. Deployer la cle publique sur le serveur\nssh-copy-id -i ~\/.ssh\/id_ed25519.pub sam@203.0.113.10\n\n# 3. Charger la cle dans l'agent\neval \"$(ssh-agent -s)\" &amp;&amp; ssh-add ~\/.ssh\/id_ed25519\n\n# 4. Tester l'acces par cle\nssh sam@203.0.113.10 \"echo Connexion par cle reussie\"<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># === Sur le serveur, une fois l'acces par cle confirme ===\n# 5. Creer le fichier de durcissement\nsudo tee \/etc\/ssh\/sshd_config.d\/99-durcissement.conf &gt; \/dev\/null &lt;&lt;'EOF'\nPubkeyAuthentication yes\nPasswordAuthentication no\nKbdInteractiveAuthentication no\nPermitRootLogin prohibit-password\nMaxAuthTries 3\nAllowUsers sam\nEOF\n\n# 6. Valider et appliquer\nsudo sshd -t &amp;&amp; sudo systemctl reload ssh<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Apr\u00e8s l&#8217;\u00e9tape 6, ouvrez une nouvelle session pour confirmer que la cl\u00e9 fonctionne toujours et que le mot de passe est refus\u00e9. Vous disposez alors d&#8217;un serveur dont le seul moyen d&#8217;acc\u00e8s SSH est une <strong>cl\u00e9 SSH<\/strong> Ed25519, sans aucun mot de passe exploitable \u00e0 distance. C&#8217;est la base de toute administration s\u00e9curis\u00e9e en 2026.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"questions-frequentes-sur-les-cles-ssh\">Questions fr\u00e9quentes sur les cl\u00e9s SSH<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"une-cle-ssh-peut-elle-etre-piratee\">Une cl\u00e9 SSH peut-elle \u00eatre pirat\u00e9e ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Casser une cl\u00e9 Ed25519 par force brute est hors de port\u00e9e des moyens actuels, avec ses ~128 bits de s\u00e9curit\u00e9. Le risque r\u00e9el n&#8217;est pas math\u00e9matique mais op\u00e9rationnel : vol du fichier de cl\u00e9 priv\u00e9e, phrase secr\u00e8te faible ou absente, ou cl\u00e9 expos\u00e9e dans un d\u00e9p\u00f4t. Une phrase secr\u00e8te robuste et, id\u00e9alement, un jeton mat\u00e9riel FIDO2 neutralisent ces vecteurs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"faut-il-une-cle-differente-par-serveur\">Faut-il une cl\u00e9 diff\u00e9rente par serveur ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Non, ce n&#8217;est pas n\u00e9cessaire. Une m\u00eame cl\u00e9 peut autoriser l&#8217;acc\u00e8s \u00e0 plusieurs serveurs sans perte de s\u00e9curit\u00e9, puisque seule la cl\u00e9 publique y est stock\u00e9e. En revanche, s\u00e9parez vos cl\u00e9s par contexte (travail, personnel, GitHub) pour cloisonner les usages et faciliter la r\u00e9vocation cibl\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"que-faire-si-joublie-ma-phrase-secrete\">Que faire si j&#8217;oublie ma phrase secr\u00e8te ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La phrase secr\u00e8te n&#8217;est pas r\u00e9cup\u00e9rable : elle chiffre la cl\u00e9 priv\u00e9e localement. Si vous l&#8217;oubliez, la cl\u00e9 est inutilisable. G\u00e9n\u00e9rez une nouvelle paire avec <code>ssh-keygen<\/code>, d\u00e9ployez la nouvelle cl\u00e9 publique sur vos serveurs, puis supprimez l&#8217;ancienne des fichiers <code>authorized_keys<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ed25519-ou-rsa-lequel-choisir\">Ed25519 ou RSA, lequel choisir ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 dans la quasi-totalit\u00e9 des cas : plus rapide, plus court et con\u00e7u pour r\u00e9sister aux erreurs d&#8217;impl\u00e9mentation. R\u00e9servez RSA 4096 aux \u00e9quipements anciens qui ne reconnaissent pas Ed25519. Ne g\u00e9n\u00e9rez plus de cl\u00e9s ECDSA ou DSA.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-supprimer-lacces-dun-utilisateur\">Comment supprimer l&#8217;acc\u00e8s d&#8217;un utilisateur ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ouvrez le fichier <code>~\/.ssh\/authorized_keys<\/code> du compte concern\u00e9 sur le serveur et supprimez la ligne contenant la cl\u00e9 publique de l&#8217;utilisateur. L&#8217;acc\u00e8s est r\u00e9voqu\u00e9 d\u00e8s la prochaine tentative de connexion, sans affecter les autres cl\u00e9s autoris\u00e9es.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"les-cles-ssh-fonctionnent-elles-sur-windows\">Les cl\u00e9s SSH fonctionnent-elles sur Windows ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oui. Windows 11 int\u00e8gre OpenSSH. Activez le \u00ab Client OpenSSH \u00bb dans les fonctionnalit\u00e9s optionnelles, puis utilisez <code>ssh-keygen<\/code> dans PowerShell exactement comme sous Linux. Les cl\u00e9s se rangent dans <code>%USERPROFILE%\\.ssh<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dois-je-sauvegarder-ma-cle-privee\">Dois-je sauvegarder ma cl\u00e9 priv\u00e9e ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sauvegardez la cl\u00e9 priv\u00e9e sur un support chiffr\u00e9 hors ligne si la perdre vous couperait l&#8217;acc\u00e8s \u00e0 des syst\u00e8mes critiques. Pour les cl\u00e9s ancr\u00e9es \u00e0 un jeton FIDO2, enregistrez plut\u00f4t un second jeton en parall\u00e8le, car la partie sensible ne peut pas \u00eatre copi\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"related-coverage\">Related Coverage<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/fr\/fail2ban-proteger-ssh-tutoriel\/\">Fail2ban : prot\u00e9ger SSH en 12 \u00e9tapes, 30 min [2026]<\/a><\/li><li><a href=\"\/fr\/vpn-wireguard-linux\/\">VPN WireGuard sur Linux : 12 \u00e9tapes, 30 min [2026]<\/a><\/li><li><a href=\"\/fr\/certificat-ssl-certbot-nginx\/\">Certificat SSL gratuit avec Certbot : 11 \u00e9tapes [2026]<\/a><\/li><li><a href=\"\/fr\/chiffrer-fichier-gpg-tutoriel\/\">GPG : chiffrer fichiers et emails, 12 \u00e9tapes [2026]<\/a><\/li><li><a href=\"\/fr\/securite-des-mots-de-passe\/\">S\u00e9curit\u00e9 des mots de passe : longueur, hachage et gestionnaires<\/a><\/li><li><a href=\"\/fr\/security-hub\/\">S\u00e9curit\u00e9 en ligne : prot\u00e9ger ses donn\u00e9es et ses comptes<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sources et r\u00e9f\u00e9rences externes : la <a href=\"https:\/\/www.openssh.com\/\" target=\"_blank\" rel=\"noopener\">documentation officielle OpenSSH<\/a>, le manuel de <a href=\"https:\/\/man.openbsd.org\/ssh-keygen\" target=\"_blank\" rel=\"noopener\">ssh-keygen<\/a>, les <a href=\"https:\/\/infosec.mozilla.org\/guidelines\/openssh\" target=\"_blank\" rel=\"noopener\">recommandations OpenSSH de Mozilla<\/a>, le guide <a href=\"https:\/\/ubuntu.com\/server\/docs\/openssh-server\" target=\"_blank\" rel=\"noopener\">OpenSSH Server d&#8217;Ubuntu<\/a> et les <a href=\"https:\/\/cyber.gouv.fr\/\" target=\"_blank\" rel=\"noopener\">publications de l&#8217;ANSSI<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le mot de passe SSH est le maillon faible de presque tous les serveurs Linux expos\u00e9s sur Internet. Les robots d&#8217;attaque par force brute frappent le port 22 en continu,\u2026<\/p>\n","protected":false},"author":9,"featured_media":148,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,3],"tags":[],"class_list":["post-147","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-10","category-security"],"_links":{"self":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/147","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/comments?post=147"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/147\/revisions"}],"predecessor-version":[{"id":149,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/147\/revisions\/149"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media\/148"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media?parent=147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/categories?post=147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/tags?post=147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}