{"id":260,"date":"2026-06-19T16:45:44","date_gmt":"2026-06-19T16:45:44","guid":{"rendered":"https:\/\/shattered.io\/fr\/2026\/06\/19\/cle-ssh-linux\/"},"modified":"2026-06-19T16:47:19","modified_gmt":"2026-06-19T16:47:19","slug":"cle-ssh-linux","status":"publish","type":"post","link":"https:\/\/shattered.io\/fr\/2026\/06\/19\/cle-ssh-linux\/","title":{"rendered":"Cl\u00e9 SSH Linux : 12 \u00c9tapes, 30 Min [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">L&#8217;authentification par cl\u00e9 SSH prot\u00e8ge vos serveurs contre 99 % des attaques automatis\u00e9es bas\u00e9es sur les mots de passe. Ce tutoriel vous guide \u00e0 travers 12 \u00e9tapes pour g\u00e9n\u00e9rer, configurer et s\u00e9curiser des cl\u00e9s SSH Ed25519 ou RSA 4 096 bits sur Linux, macOS et Windows, en moins de 30 minutes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"pourquoi-utiliser-les-cles-ssh-plutot-que-les-mots-de-passe\">Pourquoi utiliser les cl\u00e9s SSH plut\u00f4t que les mots de passe<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Les mots de passe SSH sont vuln\u00e9rables aux attaques par force brute, aux attaques par dictionnaire et \u00e0 l&#8217;hame\u00e7onnage. Un serveur expos\u00e9 sur Internet re\u00e7oit en moyenne plusieurs milliers de tentatives de connexion par mot de passe chaque jour. Les cl\u00e9s SSH \u00e9liminent enti\u00e8rement ce vecteur d&#8217;attaque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Une cl\u00e9 SSH Ed25519 256 bits offre une s\u00e9curit\u00e9 \u00e9quivalente \u00e0 une cl\u00e9 RSA de 3 000 bits, avec des op\u00e9rations cryptographiques nettement plus rapides. La paire de cl\u00e9s fonctionne sur le principe de la cryptographie asym\u00e9trique : vous gardez la cl\u00e9 priv\u00e9e sur votre machine locale, et d\u00e9posez la cl\u00e9 publique sur les serveurs auxquels vous souhaitez acc\u00e9der.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lorsque vous vous connectez, le serveur chiffre un d\u00e9fi al\u00e9atoire avec votre cl\u00e9 publique. Seul le d\u00e9tenteur de la cl\u00e9 priv\u00e9e correspondante peut d\u00e9chiffrer ce d\u00e9fi et prouver son identit\u00e9. Aucun mot de passe ne transite sur le r\u00e9seau. En production, d\u00e9sactiver l&#8217;authentification par mot de passe au profit des cl\u00e9s SSH est l&#8217;une des mesures de durcissement les plus efficaces que vous pouvez appliquer en quelques minutes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les cl\u00e9s SSH sont aussi plus pratiques : une fois l&#8217;agent SSH configur\u00e9, vous vous connectez \u00e0 vos serveurs sans saisir de mot de passe. Vous pouvez automatiser les d\u00e9ploiements, les sauvegardes et les scripts d&#8217;administration sans stocker de mots de passe en clair dans vos fichiers de configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequis\">Pr\u00e9requis<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de commencer, v\u00e9rifiez que vous disposez des \u00e9l\u00e9ments suivants :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Client SSH :<\/strong> OpenSSH 8.0 ou sup\u00e9rieur (pr\u00e9install\u00e9 sur Ubuntu 20.04+, Debian 11+, Fedora 35+, macOS 12+, Windows 10 build 1803+)<\/li>\n<li><strong>Serveur distant :<\/strong> Un serveur Linux avec acc\u00e8s SSH actif (port 22 par d\u00e9faut)<\/li>\n<li><strong>Acc\u00e8s \u00e0 un terminal :<\/strong> bash, zsh, PowerShell 7+ ou Windows Terminal<\/li>\n<li><strong>Droits administrateur :<\/strong> sudo ou acc\u00e8s root sur le serveur pour modifier sshd_config<\/li>\n<li><strong>Adresse IP ou nom de domaine :<\/strong> du serveur cible<\/li>\n<li><strong>Connexion Internet :<\/strong> pour le premier acc\u00e8s par mot de passe lors du d\u00e9p\u00f4t de la cl\u00e9<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifiez votre version d&#8217;OpenSSH avec cette commande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -V<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de sortie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13 30 Jan 2024<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si votre version est ant\u00e9rieure \u00e0 6.5, Ed25519 n&#8217;est pas support\u00e9. Dans ce cas, mettez \u00e0 jour OpenSSH ou utilisez RSA 4 096 bits. Sur Ubuntu et Debian, la mise \u00e0 jour s&#8217;effectue avec <code>sudo apt update &amp;&amp; sudo apt install openssh-client openssh-server<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"vue-densemble-comment-fonctionne-lauthentification-par-cle-ssh\">Vue d&#8217;ensemble : comment fonctionne l&#8217;authentification par cl\u00e9 SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;authentification par cl\u00e9 SSH repose sur la cryptographie asym\u00e9trique. Voici le flux complet d&#8217;une connexion r\u00e9ussie :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Le client SSH propose sa cl\u00e9 publique au serveur<\/li>\n<li>Le serveur v\u00e9rifie que cette cl\u00e9 est pr\u00e9sente dans <code>~\/.ssh\/authorized_keys<\/code><\/li>\n<li>Le serveur g\u00e9n\u00e8re un d\u00e9fi al\u00e9atoire et le chiffre avec la cl\u00e9 publique du client<\/li>\n<li>Le client d\u00e9chiffre le d\u00e9fi avec sa cl\u00e9 priv\u00e9e<\/li>\n<li>Le client envoie la r\u00e9ponse d\u00e9chiffr\u00e9e, combin\u00e9e \u00e0 un identifiant de session<\/li>\n<li>Le serveur v\u00e9rifie la r\u00e9ponse et autorise la connexion sans aucun mot de passe<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Ce m\u00e9canisme garantit que la cl\u00e9 priv\u00e9e ne quitte jamais votre machine locale. M\u00eame si un attaquant intercepte la communication, il ne peut pas retrouver la cl\u00e9 priv\u00e9e \u00e0 partir du d\u00e9fi chiffr\u00e9.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Algorithme<\/th><th>Taille de cl\u00e9<\/th><th>S\u00e9curit\u00e9 \u00e9quivalente RSA<\/th><th>Performance signature<\/th><th>Recommandation 2026<\/th><\/tr><\/thead><tbody><tr><td>Ed25519<\/td><td>256 bits<\/td><td>~3 000 bits<\/td><td>Tr\u00e8s rapide<\/td><td>Premier choix<\/td><\/tr><tr><td>RSA 4096<\/td><td>4 096 bits<\/td><td>4 096 bits<\/td><td>Moyen<\/td><td>Compatibilit\u00e9 legacy<\/td><\/tr><tr><td>ECDSA 256<\/td><td>256 bits<\/td><td>~3 000 bits<\/td><td>Rapide<\/td><td>D\u00e9conseill\u00e9<\/td><\/tr><tr><td>RSA 2048<\/td><td>2 048 bits<\/td><td>2 048 bits<\/td><td>Moyen<\/td><td>D\u00e9pr\u00e9ci\u00e9<\/td><\/tr><tr><td>DSA 1024<\/td><td>1 024 bits<\/td><td>Insuffisant<\/td><td>Lent<\/td><td>Interdit<\/td><\/tr><tr><td>Ed25519-SK<\/td><td>256 bits<\/td><td>~3 000 bits<\/td><td>Tr\u00e8s rapide<\/td><td>YubiKey\/FIDO2<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-1-generer-une-paire-de-cles-ssh-ed25519\">\u00c9tape 1 : g\u00e9n\u00e9rer une paire de cl\u00e9s SSH Ed25519<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 est l&#8217;algorithme recommand\u00e9 pour tous les nouveaux d\u00e9ploiements en 2026. Il utilise la courbe elliptique Curve25519, con\u00e7ue par Daniel J. Bernstein, avec des param\u00e8tres publiquement v\u00e9rifiables. Ses avantages par rapport \u00e0 RSA sont multiples : cl\u00e9s beaucoup plus courtes (68 octets contre ~800 pour RSA 4096), signatures rapides et un m\u00e9canisme d\u00e9terministe qui \u00e9limine les risques li\u00e9s \u00e0 un g\u00e9n\u00e9rateur de nombres al\u00e9atoires d\u00e9faillant.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sur votre machine locale, ex\u00e9cutez :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -C \"votre-email@domaine.fr\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie attendue :<\/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\/utilisateur\/.ssh\/id_ed25519):\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in \/home\/utilisateur\/.ssh\/id_ed25519\nYour public key has been saved in \/home\/utilisateur\/.ssh\/id_ed25519.pub\nThe key fingerprint is:\nSHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcdef votre-email@domaine.fr\nThe key's randomart image is:\n+--[ED25519 256]--+\n|        .o+o..   |\n|       . ooo.    |\n|        =...     |\n|       . *       |\n|      S . +      |\n+----[SHA256]-----+<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Par d\u00e9faut, <code>ssh-keygen<\/code> cr\u00e9e deux fichiers :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>~\/.ssh\/id_ed25519<\/code> : votre cl\u00e9 priv\u00e9e, \u00e0 ne jamais partager<\/li>\n<li><code>~\/.ssh\/id_ed25519.pub<\/code> : votre cl\u00e9 publique, \u00e0 d\u00e9poser sur les serveurs<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pour nommer la cl\u00e9 diff\u00e9remment, recommand\u00e9 si vous g\u00e9rez plusieurs serveurs ou comptes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -C \"serveur-prod-2026\" -f ~\/.ssh\/id_ed25519_prod<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifiez que la cl\u00e9 est bien g\u00e9n\u00e9r\u00e9e :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -la ~\/.ssh\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Affichez votre cl\u00e9 publique pour la copier sur un serveur :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/id_ed25519.pub<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie (la v\u00f4tre sera diff\u00e9rente) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBcgkBFKMOmNyFJ1VzMz2J5HkqLbGgB7XzABCDE12345 votre-email@domaine.fr<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-2-generer-une-cle-rsa-4-096-bits-pour-la-compatibilite\">\u00c9tape 2 : g\u00e9n\u00e9rer une cl\u00e9 RSA 4 096 bits pour la compatibilit\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Certains syst\u00e8mes plus anciens ne supportent pas Ed25519 : \u00e9quipements r\u00e9seau sous firmware vieillissant, serveurs sous CentOS 6, ou certains clients SSH Windows pr\u00e9install\u00e9s. Dans ces cas, utilisez RSA 4 096 bits.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t rsa -b 4096 -C \"votre-email@domaine.fr\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie attendue :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Generating public\/private rsa key pair.\nEnter file in which to save the key (\/home\/utilisateur\/.ssh\/id_rsa):\nEnter passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved in \/home\/utilisateur\/.ssh\/id_rsa\nYour public key has been saved in \/home\/utilisateur\/.ssh\/id_rsa.pub\nThe key fingerprint is:\nSHA256:XyZaBcDeFgHiJkLmNoPqRsTuVwXyZ12345678abcdef votre-email@domaine.fr<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">N&#8217;utilisez jamais RSA 1 024 ou 2 048 bits pour de nouveaux projets. RSA 1 024 bits est consid\u00e9r\u00e9 cassable avec des ressources importantes. RSA 2 048 bits reste acceptable pour la compatibilit\u00e9 h\u00e9rit\u00e9e, mais 4 096 bits est la taille minimale recommand\u00e9e pour les nouvelles cl\u00e9s RSA en 2026.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour v\u00e9rifier la taille et l&#8217;empreinte de votre cl\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -l -f ~\/.ssh\/id_rsa.pub<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>4096 SHA256:XyZaBcDeFgHiJkLmNoPqRsTuVwXyZ12345678abcdef votre-email@domaine.fr (RSA)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Le premier chiffre (4096) confirme la taille de la cl\u00e9. Si vous voyez 2048 ou moins, r\u00e9g\u00e9n\u00e9rez la cl\u00e9 avec <code>-b 4096<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-3-proteger-la-cle-privee-avec-une-phrase-de-passe\">\u00c9tape 3 : prot\u00e9ger la cl\u00e9 priv\u00e9e avec une phrase de passe<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La phrase de passe chiffre votre cl\u00e9 priv\u00e9e sur disque avec AES-256-CBC. Si quelqu&#8217;un acc\u00e8de physiquement \u00e0 votre machine ou vole le fichier de cl\u00e9, il ne peut pas l&#8217;utiliser sans la phrase de passe. Utilisez une phrase de passe d&#8217;au moins 14 caract\u00e8res, en combinant lettres, chiffres et caract\u00e8res sp\u00e9ciaux. Une phrase enti\u00e8re est plus facile \u00e0 retenir qu&#8217;une suite de caract\u00e8res al\u00e9atoires et peut \u00eatre tout aussi s\u00e9curis\u00e9e.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour ajouter ou modifier la phrase de passe d&#8217;une cl\u00e9 existante :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -p -f ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Enter old passphrase:\nEnter new passphrase (empty for no passphrase):\nEnter same passphrase again:\nYour identification has been saved with the new passphrase.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9finissez maintenant les permissions correctes sur vos fichiers SSH. Des permissions trop ouvertes emp\u00eachent OpenSSH de fonctionner :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/id_ed25519\nchmod 644 ~\/.ssh\/id_ed25519.pub\nchmod 600 ~\/.ssh\/config 2>\/dev\/null || true<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifiez les permissions :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -la ~\/.ssh\/<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie attendue :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>drwx------  2 utilisateur utilisateur 4096 jun 19 10:00 .\ndrwxr-xr-x 25 utilisateur utilisateur 4096 jun 19 09:58 ..\n-rw-------  1 utilisateur utilisateur  411 jun 19 10:00 id_ed25519\n-rw-r--r--  1 utilisateur utilisateur  100 jun 19 10:00 id_ed25519.pub<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-4-copier-la-cle-publique-sur-le-serveur-avec-ssh-copy-id\">\u00c9tape 4 : copier la cl\u00e9 publique sur le serveur avec ssh-copy-id<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>ssh-copy-id<\/code> est l&#8217;outil le plus simple pour d\u00e9poser votre cl\u00e9 publique sur un serveur distant. Il g\u00e8re automatiquement la cr\u00e9ation du r\u00e9pertoire <code>~\/.ssh<\/code> et du fichier <code>authorized_keys<\/code> avec les bonnes permissions.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-copy-id -i ~\/.ssh\/id_ed25519.pub utilisateur@adresse-ip-serveur<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple avec un port non standard :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-copy-id -i ~\/.ssh\/id_ed25519.pub -p 2222 utilisateur@192.168.1.100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie attendue :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/bin\/ssh-copy-id: INFO: Source of key(s) to be installed: \"\/home\/utilisateur\/.ssh\/id_ed25519.pub\"\n\/usr\/bin\/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed\n\/usr\/bin\/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys\nutilisateur@192.168.1.100's password:\n\nNumber of key(s) added: 1\n\nNow try logging into the machine, with:   \"ssh 'utilisateur@192.168.1.100'\"\nand check to make sure that only the key(s) you wanted were added.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur <strong>macOS<\/strong>, si <code>ssh-copy-id<\/code> n&#8217;est pas disponible, installez-le via Homebrew :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>brew install ssh-copy-id<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur <strong>Windows<\/strong> avec PowerShell, copiez manuellement avec cette commande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>type $env:USERPROFILE\\.ssh\\id_ed25519.pub | ssh utilisateur@192.168.1.100 \"cat >> ~\/.ssh\/authorized_keys\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si le r\u00e9pertoire <code>~\/.ssh<\/code> n&#8217;existe pas encore sur le serveur, cr\u00e9ez-le d&#8217;abord :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh utilisateur@192.168.1.100 \"mkdir -p ~\/.ssh &amp;&amp; chmod 700 ~\/.ssh\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-5-configurer-authorized_keys-manuellement\">\u00c9tape 5 : configurer authorized_keys manuellement<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>ssh-copy-id<\/code> n&#8217;est pas disponible, ou si vous administrez plusieurs utilisateurs sur un serveur sans acc\u00e8s direct, configurez <code>authorized_keys<\/code> manuellement.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Connectez-vous au serveur avec un mot de passe ou via un acc\u00e8s console, puis ex\u00e9cutez :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Sur le serveur distant\nmkdir -p ~\/.ssh\nchmod 700 ~\/.ssh\ntouch ~\/.ssh\/authorized_keys\nchmod 600 ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Copiez le contenu de votre cl\u00e9 publique depuis votre machine locale :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Sur votre machine locale\ncat ~\/.ssh\/id_ed25519.pub<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur le serveur, ajoutez la cl\u00e9 publique au fichier <code>authorized_keys<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo \"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBcg... votre-email@domaine.fr\" >> ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00e9rifiez le contenu du fichier :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez restreindre une cl\u00e9 \u00e0 certaines adresses IP sources ou \u00e0 une seule commande gr\u00e2ce aux options <code>authorized_keys<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Restreindre \u00e0 une adresse IP source\nfrom=\"192.168.1.50\" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... votre-email@domaine.fr\n\n# Limiter \u00e0 une seule commande (pour les scripts de sauvegarde)\ncommand=\"rsync --server -avz . \/backup\/\",no-pty,no-agent-forwarding,no-X11-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... backup@domaine.fr\n\n# Combinaison : IP source et commande unique\nfrom=\"10.0.0.5\",command=\"\/usr\/bin\/rsync --server -avz . \/data\/\" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... backup-script@domaine.fr<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ces restrictions permettent d&#8217;accorder un acc\u00e8s SSH minimal \u00e0 des scripts d&#8217;automatisation sans risquer qu&#8217;une cl\u00e9 vol\u00e9e soit utilis\u00e9e pour un acc\u00e8s shell complet.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-6-tester-la-connexion-ssh-par-cle\">\u00c9tape 6 : tester la connexion SSH par cl\u00e9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de d\u00e9sactiver l&#8217;authentification par mot de passe, testez la connexion par cl\u00e9 dans une nouvelle session distincte, en gardant votre session actuelle ouverte. Si quelque chose tourne mal, vous conservez l&#8217;acc\u00e8s.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/id_ed25519 utilisateur@192.168.1.100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour forcer l&#8217;authentification par cl\u00e9 uniquement et diagnostiquer les probl\u00e8mes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -v -i ~\/.ssh\/id_ed25519 -o PasswordAuthentication=no utilisateur@192.168.1.100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie partielle en mode verbeux lors d&#8217;une connexion r\u00e9ussie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>debug1: Connecting to 192.168.1.100 [192.168.1.100] port 22.\ndebug1: Connection established.\ndebug1: Authenticating to 192.168.1.100:22 as 'utilisateur'\ndebug1: Offering public key: \/home\/utilisateur\/.ssh\/id_ed25519 ED25519 SHA256:AbCdEf...\ndebug1: Server accepts key: \/home\/utilisateur\/.ssh\/id_ed25519 ED25519 SHA256:AbCdEf...\ndebug1: Authentication succeeded (publickey).\nAuthenticated to 192.168.1.100 ([192.168.1.100]:22).<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La ligne <code>Authentication succeeded (publickey)<\/code> confirme que la connexion utilise bien votre cl\u00e9 SSH. Si vous voyez \u00e0 la place <code>Authentication succeeded (password)<\/code>, la configuration de la cl\u00e9 est incorrecte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-7-desactiver-lauthentification-par-mot-de-passe\">\u00c9tape 7 : d\u00e9sactiver l&#8217;authentification par mot de passe<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Une fois la connexion par cl\u00e9 valid\u00e9e et test\u00e9e, d\u00e9sactivez l&#8217;authentification par mot de passe sur le serveur. Cette \u00e9tape \u00e9limine 99 % des tentatives d&#8217;attaque par force brute automatis\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Connectez-vous au serveur avec votre cl\u00e9 SSH, puis \u00e9ditez le fichier de configuration du daemon SSH :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/ssh\/sshd_config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Trouvez et modifiez ou ajoutez les directives suivantes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># D\u00e9sactiver l'authentification par mot de passe\nPasswordAuthentication no\n\n# D\u00e9sactiver l'authentification par clavier interactif\nKbdInteractiveAuthentication no\n\n# D\u00e9sactiver les mots de passe vides\nPermitEmptyPasswords no\n\n# D\u00e9sactiver la connexion root directe\nPermitRootLogin no\n\n# Activer l'authentification par cl\u00e9 publique\nPubkeyAuthentication yes\n\n# Sp\u00e9cifier le fichier authorized_keys\nAuthorizedKeysFile .ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Testez la configuration avant de recharger :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sshd -t<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si cette commande ne retourne rien, la syntaxe est valide. Rechargez la configuration sans couper les connexions existantes :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Sur Ubuntu et Debian\nsudo systemctl reload ssh\n\n# Sur CentOS, RHEL, Fedora, AlmaLinux\nsudo systemctl reload sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Depuis une troisi\u00e8me fen\u00eatre de terminal, v\u00e9rifiez qu&#8217;il est impossible de se connecter par mot de passe :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -o PasswordAuthentication=yes -o PubkeyAuthentication=no utilisateur@192.168.1.100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie attendue :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>utilisateur@192.168.1.100: Permission denied (publickey).<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-8-utiliser-ssh-agent-pour-gerer-les-cles\">\u00c9tape 8 : utiliser ssh-agent pour g\u00e9rer les cl\u00e9s<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Si votre cl\u00e9 priv\u00e9e est prot\u00e9g\u00e9e par une phrase de passe, vous devrez la saisir \u00e0 chaque connexion. <code>ssh-agent<\/code> stocke la cl\u00e9 d\u00e9chiffr\u00e9e en m\u00e9moire pour la dur\u00e9e de votre session, vous \u00e9vitant de la saisir plusieurs fois.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9marrez <code>ssh-agent<\/code> et ajoutez votre cl\u00e9 :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Agent pid 12345\nEnter passphrase for \/home\/utilisateur\/.ssh\/id_ed25519:\nIdentity added: \/home\/utilisateur\/.ssh\/id_ed25519 (votre-email@domaine.fr)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour lister les cl\u00e9s charg\u00e9es dans l&#8217;agent :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-add -l<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>256 SHA256:AbCdEf... votre-email@domaine.fr (ED25519)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur <strong>macOS<\/strong>, ajoutez votre cl\u00e9 au trousseau Keychain pour qu&#8217;elle se recharge automatiquement apr\u00e8s chaque red\u00e9marrage :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-add --apple-use-keychain ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ajoutez ces lignes \u00e0 votre <code>~\/.ssh\/config<\/code> sur macOS :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host *\n  UseKeychain yes\n  AddKeysToAgent yes\n  IdentityFile ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur <strong>Linux<\/strong>, pour que ssh-agent d\u00e9marre automatiquement \u00e0 chaque ouverture de terminal, ajoutez ceci \u00e0 votre <code>~\/.bashrc<\/code> ou <code>~\/.zshrc<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>if [ -z \"$SSH_AUTH_SOCK\" ]; then\n  eval \"$(ssh-agent -s)\" > \/dev\/null\n  ssh-add ~\/.ssh\/id_ed25519 2>\/dev\/null\nfi<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour supprimer une cl\u00e9 de l&#8217;agent sans tuer le processus :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-add -d ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-9-configurer-le-fichier-ssh-config\">\u00c9tape 9 : configurer le fichier ~\/.ssh\/config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le fichier <code>~\/.ssh\/config<\/code> simplifie la gestion de multiples serveurs SSH en d\u00e9finissant des alias et des options par h\u00f4te. Il vous \u00e9vite de taper l&#8217;adresse IP compl\u00e8te, le port ou le nom d&#8217;utilisateur \u00e0 chaque connexion.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano ~\/.ssh\/config<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Exemple de configuration compl\u00e8te avec plusieurs serveurs :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Serveur de production\nHost prod\n  HostName 203.0.113.10\n  User deployer\n  IdentityFile ~\/.ssh\/id_ed25519_prod\n  Port 2222\n  IdentitiesOnly yes\n\n# Serveur de staging\nHost staging\n  HostName 203.0.113.20\n  User ubuntu\n  IdentityFile ~\/.ssh\/id_ed25519\n  Port 22\n  IdentitiesOnly yes\n\n# Bastion SSH (jump host)\nHost bastion\n  HostName bastion.entreprise.fr\n  User admin\n  IdentityFile ~\/.ssh\/id_ed25519\n  Port 22\n\n# Serveur interne via bastion\nHost serveur-interne\n  HostName 10.0.0.50\n  User admin\n  ProxyJump bastion\n  IdentityFile ~\/.ssh\/id_ed25519\n\n# Configuration globale\nHost *\n  ServerAliveInterval 60\n  ServerAliveCountMax 3\n  IdentitiesOnly yes\n  AddKeysToAgent yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Avec cette configuration, vous vous connectez au serveur de production avec :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh prod<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La directive <code>IdentitiesOnly yes<\/code> emp\u00eache ssh d&#8217;essayer toutes les cl\u00e9s de l&#8217;agent avant d&#8217;utiliser celle sp\u00e9cifi\u00e9e. Sans cette option, des serveurs avec des politiques restrictives (MaxAuthTries bas) peuvent refuser la connexion apr\u00e8s trop de tentatives. <code>ServerAliveInterval 60<\/code> envoie un paquet keepalive toutes les 60 secondes pour \u00e9viter les d\u00e9connexions intempestives dues aux pare-feux.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9finissez les bonnes permissions sur ce fichier :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 ~\/.ssh\/config<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-10-configurer-les-cles-ssh-pour-github-et-gitlab\">\u00c9tape 10 : configurer les cl\u00e9s SSH pour GitHub et GitLab<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">GitHub et GitLab utilisent les cl\u00e9s SSH pour authentifier les op\u00e9rations Git (clone, push, pull) sans mot de passe. Voici comment configurer une cl\u00e9 d\u00e9di\u00e9e et g\u00e9rer plusieurs comptes sur la m\u00eame machine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">G\u00e9n\u00e9rez une cl\u00e9 d\u00e9di\u00e9e pour GitHub :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh-keygen -t ed25519 -C \"git@github-compte-pro\" -f ~\/.ssh\/id_ed25519_github<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Affichez votre cl\u00e9 publique :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat ~\/.ssh\/id_ed25519_github.pub<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sur GitHub, allez dans <strong>Param\u00e8tres &gt; Cl\u00e9s SSH et GPG &gt; Nouvelle cl\u00e9 SSH<\/strong>. Collez le contenu de votre cl\u00e9 publique. Choisissez un titre descriptif comme &#8220;MacBook Pro 2026&#8221; ou &#8220;Laptop Dev&#8221;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ajoutez une entr\u00e9e dans <code>~\/.ssh\/config<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host github.com\n  HostName github.com\n  User git\n  IdentityFile ~\/.ssh\/id_ed25519_github\n  IdentitiesOnly yes\n\nHost gitlab.com\n  HostName gitlab.com\n  User git\n  IdentityFile ~\/.ssh\/id_ed25519_gitlab\n  IdentitiesOnly yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Testez la connexion \u00e0 GitHub :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -T git@github.com<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Sortie attendue :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Hi votre-nom-utilisateur! You've successfully authenticated, but GitHub does not provide shell access.<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pour g\u00e9rer plusieurs comptes GitHub, un personnel et un professionnel, sur la m\u00eame machine :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Host github-perso\n  HostName github.com\n  User git\n  IdentityFile ~\/.ssh\/id_ed25519_github_perso\n  IdentitiesOnly yes\n\nHost github-pro\n  HostName github.com\n  User git\n  IdentityFile ~\/.ssh\/id_ed25519_github_pro\n  IdentitiesOnly yes<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Clonez les d\u00e9p\u00f4ts en utilisant l&#8217;alias correspondant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Compte personnel\ngit clone git@github-perso:votre-pseudo\/mon-projet.git\n\n# Compte professionnel\ngit clone git@github-pro:entreprise\/projet-pro.git<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-11-rotation-et-revocation-des-cles-ssh\">\u00c9tape 11 : rotation et r\u00e9vocation des cl\u00e9s SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La rotation r\u00e9guli\u00e8re des cl\u00e9s SSH est une pratique essentielle dans les environnements professionnels. Une cl\u00e9 compromise repr\u00e9sente un acc\u00e8s permanent jusqu&#8217;\u00e0 sa r\u00e9vocation. Voici la proc\u00e9dure compl\u00e8te pour effectuer une rotation sans interruption de service.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour r\u00e9voquer une cl\u00e9, supprimez la ligne correspondante dans <code>~\/.ssh\/authorized_keys<\/code> sur le serveur :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># V\u00e9rifier les cl\u00e9s actuellement autoris\u00e9es\ncat ~\/.ssh\/authorized_keys\n\n# Supprimer une cl\u00e9 par son commentaire\nsed -i '\/ancien-email@domaine.fr\/d' ~\/.ssh\/authorized_keys\n\n# V\u00e9rifier la suppression\ncat ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Proc\u00e9dure de rotation en 3 \u00e9tapes sans coupure de service :<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>G\u00e9n\u00e9rez une nouvelle paire de cl\u00e9s sur votre machine locale : <code>ssh-keygen -t ed25519 -f ~\/.ssh\/id_ed25519_nouveau<\/code><\/li>\n<li>Ajoutez la nouvelle cl\u00e9 publique dans <code>authorized_keys<\/code> sur chaque serveur, les deux cl\u00e9s coexistant temporairement<\/li>\n<li>Testez la connexion avec la nouvelle cl\u00e9, puis supprimez l&#8217;ancienne<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les environnements avec plusieurs serveurs, ce script automatise la rotation :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# Script de rotation de cl\u00e9 SSH sur plusieurs serveurs\n\nNOUVELLE_CLE=$(cat ~\/.ssh\/id_ed25519_nouveau.pub)\nANCIENNE_CLE_COMMENTAIRE=\"ancien-email@domaine.fr\"\nSERVEURS=(\"prod1.domaine.fr\" \"prod2.domaine.fr\" \"staging.domaine.fr\")\n\nfor SERVEUR in \"${SERVEURS[@]}\"; do\n  echo \"Traitement de $SERVEUR...\"\n\n  # Ajouter la nouvelle cl\u00e9\n  ssh utilisateur@$SERVEUR \"echo '$NOUVELLE_CLE' >> ~\/.ssh\/authorized_keys\"\n\n  # Tester la connexion avec la nouvelle cl\u00e9\n  if ssh -i ~\/.ssh\/id_ed25519_nouveau utilisateur@$SERVEUR \"echo 'Connexion OK'\" 2>\/dev\/null; then\n    # Supprimer l'ancienne cl\u00e9 seulement si la nouvelle fonctionne\n    ssh -i ~\/.ssh\/id_ed25519_nouveau utilisateur@$SERVEUR \\\n      \"sed -i '\/$ANCIENNE_CLE_COMMENTAIRE\/d' ~\/.ssh\/authorized_keys\"\n    echo \"$SERVEUR : rotation terminee avec succes\"\n  else\n    echo \"$SERVEUR : ECHEC - ancienne cle conservee\"\n  fi\ndone<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"etape-12-durcissement-avance-du-serveur-ssh-sshd_config\">\u00c9tape 12 : durcissement avanc\u00e9 du serveur SSH (sshd_config)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La configuration par d\u00e9faut de sshd n&#8217;est pas optimis\u00e9e pour la s\u00e9curit\u00e9 en production. Voici une configuration durcie pour 2026, qui limite les algorithmes aux plus s\u00fbrs et r\u00e9duit la surface d&#8217;attaque. Cette configuration s&#8217;aligne avec les recommandations de l&#8217;ANSSI (Agence Nationale de la S\u00e9curit\u00e9 des Syst\u00e8mes d&#8217;Information) pour la s\u00e9curisation des acc\u00e8s SSH.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \/etc\/ssh\/sshd_config - Configuration durcie 2026\n\n# Port non standard (r\u00e9duit le bruit des scans automatiques)\nPort 2222\n\n# \u00c9couter uniquement en IPv4 si IPv6 non n\u00e9cessaire\nAddressFamily inet\n\n# Cl\u00e9s d'h\u00f4te (Ed25519 en priorit\u00e9)\nHostKey \/etc\/ssh\/ssh_host_ed25519_key\nHostKey \/etc\/ssh\/ssh_host_rsa_key\n\n# Algorithmes d'\u00e9change de cl\u00e9s\nKexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512\n\n# Chiffrements authentifi\u00e9s\nCiphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com\n\n# Codes d'authentification de message\nMACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com\n\n# Authentification\nPubkeyAuthentication yes\nPasswordAuthentication no\nPermitEmptyPasswords no\nKbdInteractiveAuthentication no\nUsePAM yes\n\n# Restrictions d'acc\u00e8s\nPermitRootLogin no\nAllowUsers deployer admin\nMaxAuthTries 3\nMaxSessions 5\nLoginGraceTime 30\n\n# D\u00e9sactiver les fonctionnalit\u00e9s inutiles\nX11Forwarding no\nAllowTcpForwarding no\nAllowAgentForwarding no\nPermitTunnel no\nPrintMotd no\n\n# Journalisation d\u00e9taill\u00e9e\nLogLevel VERBOSE\nSyslogFacility AUTH\n\n# Keepalive\nClientAliveInterval 300\nClientAliveCountMax 2<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Validez et rechargez :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo sshd -t &amp;&amp; sudo systemctl reload sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Si vous changez le port SSH, mettez \u00e0 jour votre pare-feu. Sur Ubuntu avec ufw :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo ufw allow 2222\/tcp\nsudo ufw delete allow 22\/tcp\nsudo ufw status<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"comparaison-des-algorithmes-ssh-ed25519-rsa-ecdsa-en-detail\">Comparaison des algorithmes SSH : Ed25519, RSA, ECDSA en d\u00e9tail<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le choix d&#8217;algorithme d\u00e9termine la r\u00e9sistance de votre cl\u00e9 SSH aux attaques actuelles et futures. Voici un tableau de d\u00e9cision complet pour 2026 :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Crit\u00e8re<\/th><th>Ed25519<\/th><th>RSA 4096<\/th><th>ECDSA 256<\/th><th>DSA 1024<\/th><\/tr><\/thead><tbody><tr><td>Taille de cl\u00e9 publique<\/td><td>68 octets<\/td><td>~800 octets<\/td><td>~180 octets<\/td><td>~444 octets<\/td><\/tr><tr><td>Vitesse de signature<\/td><td>Tr\u00e8s rapide<\/td><td>Lente<\/td><td>Rapide<\/td><td>Lente<\/td><\/tr><tr><td>R\u00e9sistance PRNG faible<\/td><td>Oui (d\u00e9terministe)<\/td><td>Partielle<\/td><td>Non (vuln\u00e9rable)<\/td><td>Non (vuln\u00e9rable)<\/td><\/tr><tr><td>Support OpenSSH depuis<\/td><td>6.5 (2014)<\/td><td>Depuis l&#8217;origine<\/td><td>5.7 (2011)<\/td><td>Obsol\u00e8te<\/td><\/tr><tr><td>Support\u00e9 GitHub 2026<\/td><td>Oui<\/td><td>Oui<\/td><td>Oui<\/td><td>Non<\/td><\/tr><tr><td>Compatibilit\u00e9 legacy<\/td><td>Bonne (post-2014)<\/td><td>Universelle<\/td><td>Bonne<\/td><td>Aucune<\/td><\/tr><tr><td>Recommandation 2026<\/td><td>Premier choix<\/td><td>Compatibilit\u00e9<\/td><td>D\u00e9conseill\u00e9<\/td><td>Interdit<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;avantage majeur d&#8217;Ed25519 sur ECDSA repose dans son caract\u00e8re d\u00e9terministe. ECDSA g\u00e9n\u00e8re un nonce al\u00e9atoire \u00e0 chaque signature : si ce nonce est r\u00e9p\u00e9t\u00e9 ou pr\u00e9visible, la cl\u00e9 priv\u00e9e peut \u00eatre math\u00e9matiquement reconstruite. C&#8217;est exactement ce qui s&#8217;est produit avec la PlayStation 3 en 2010, dont la cl\u00e9 priv\u00e9e ECDSA a \u00e9t\u00e9 expos\u00e9e \u00e0 cause d&#8217;un nonce fixe. Ed25519 \u00e9vite ce risque par construction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DSA est d\u00e9sactiv\u00e9 par d\u00e9faut depuis OpenSSH 7.0 (2015) et compl\u00e8tement supprim\u00e9 depuis OpenSSH 9.0 (2022). Ne l&#8217;utilisez sous aucun pr\u00e9texte.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5-pieges-courants-et-comment-les-eviter\">5 pi\u00e8ges courants et comment les \u00e9viter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ces erreurs repr\u00e9sentent la quasi-totalit\u00e9 des cas de support li\u00e9s \u00e0 la configuration SSH. V\u00e9rifiez-les syst\u00e9matiquement avant de conclure que votre configuration est d\u00e9faillante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-1-permissions-incorrectes-sur-les-fichiers-ssh\">Pi\u00e8ge 1 : permissions incorrectes sur les fichiers SSH<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH refuse de fonctionner si les permissions des fichiers SSH sont trop ouvertes. C&#8217;est la cause d&#8217;\u00e9chec la plus fr\u00e9quente, surtout apr\u00e8s une copie de fichiers ou un changement de propri\u00e9taire.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Fichier \/ R\u00e9pertoire<\/th><th>Permission correcte<\/th><th>Erreur courante<\/th><\/tr><\/thead><tbody><tr><td><code>~\/.ssh\/<\/code><\/td><td>700 (drwx&#8212;&#8212;)<\/td><td>755 ou 777<\/td><\/tr><tr><td><code>~\/.ssh\/authorized_keys<\/code><\/td><td>600 (-rw&#8212;&#8212;-)<\/td><td>644 ou 777<\/td><\/tr><tr><td><code>~\/.ssh\/id_ed25519<\/code><\/td><td>600 (-rw&#8212;&#8212;-)<\/td><td>644 ou 755<\/td><\/tr><tr><td><code>~\/.ssh\/id_ed25519.pub<\/code><\/td><td>644 (-rw-r&#8211;r&#8211;)<\/td><td>777<\/td><\/tr><tr><td><code>~\/.ssh\/config<\/code><\/td><td>600 (-rw&#8212;&#8212;-)<\/td><td>644 ou 755<\/td><\/tr><tr><td>R\u00e9pertoire home <code>\/home\/user<\/code><\/td><td>755 (drwxr-xr-x)<\/td><td>777 (bloque StrictModes)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Corrigez toutes les permissions en une seule commande :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/authorized_keys ~\/.ssh\/id_ed25519 ~\/.ssh\/config 2>\/dev\/null\nchmod 644 ~\/.ssh\/id_ed25519.pub<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-2-desactiver-les-mots-de-passe-avant-de-tester-la-cle\">Pi\u00e8ge 2 : d\u00e9sactiver les mots de passe avant de tester la cl\u00e9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ne modifiez jamais <code>PasswordAuthentication no<\/code> dans <code>sshd_config<\/code> sans avoir au pr\u00e9alable test\u00e9 la connexion par cl\u00e9 dans une session s\u00e9par\u00e9e, en gardant votre session actuelle ouverte. Si votre cl\u00e9 ne fonctionne pas et que vous coupez l&#8217;acc\u00e8s par mot de passe, vous vous retrouvez bloqu\u00e9 hors du serveur. Sur un VPS, vous aurez besoin d&#8217;acc\u00e9der \u00e0 la console de secours du fournisseur pour corriger l&#8217;erreur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-3-confondre-cle-publique-et-cle-privee\">Pi\u00e8ge 3 : confondre cl\u00e9 publique et cl\u00e9 priv\u00e9e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La cl\u00e9 publique (<code>.pub<\/code>) se d\u00e9pose sur les serveurs dans <code>authorized_keys<\/code>. La cl\u00e9 priv\u00e9e (sans extension) reste exclusivement sur votre machine locale. D\u00e9poser la cl\u00e9 priv\u00e9e sur un serveur repr\u00e9sente une faille de s\u00e9curit\u00e9 critique. Si cela se produit, g\u00e9n\u00e9rez imm\u00e9diatement une nouvelle paire de cl\u00e9s, d\u00e9ployez la nouvelle cl\u00e9 publique sur tous vos serveurs, et supprimez l&#8217;ancienne cl\u00e9 compromise de tous les <code>authorized_keys<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-4-repertoire-home-avec-permissions-incorrectes-strictmodes\">Pi\u00e8ge 4 : r\u00e9pertoire home avec permissions incorrectes (StrictModes)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSH active par d\u00e9faut <code>StrictModes yes<\/code>, qui v\u00e9rifie les permissions du r\u00e9pertoire home de l&#8217;utilisateur. Si <code>\/home\/utilisateur<\/code> est accessible en \u00e9criture par d&#8217;autres (permission 777), SSH refuse l&#8217;authentification par cl\u00e9 m\u00eame si <code>authorized_keys<\/code> est correctement configur\u00e9. V\u00e9rifiez :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -ld ~\n# Attendu : drwxr-xr-x (755) ou drwx------ (700)\n# Interdit : drwxrwxrwx (777)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"piege-5-cle-publique-copiee-avec-des-sauts-de-ligne\">Pi\u00e8ge 5 : cl\u00e9 publique copi\u00e9e avec des sauts de ligne<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Une cl\u00e9 SSH publique doit tenir sur une seule ligne dans <code>authorized_keys<\/code>. Si vous copiez-collez depuis un \u00e9diteur de texte qui ins\u00e8re des retours \u00e0 la ligne automatiques (Word, certains \u00e9diteurs de code), la cl\u00e9 devient invalide. Utilisez toujours <code>cat<\/code> pour afficher la cl\u00e9, et v\u00e9rifiez avec :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Compter les lignes (1 ligne par cl\u00e9)\nwc -l ~\/.ssh\/authorized_keys\n\n# V\u00e9rifier la syntaxe de la cl\u00e9\nssh-keygen -l -f ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"depannage-8-erreurs-ssh-frequentes\">D\u00e9pannage : 8 erreurs SSH fr\u00e9quentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ces erreurs couvrent 95 % des probl\u00e8mes de connexion SSH rencontr\u00e9s apr\u00e8s la configuration de l&#8217;authentification par cl\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-1-permission-denied-publickey\">Erreur 1 : Permission denied (publickey)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> La cl\u00e9 n&#8217;est pas dans <code>authorized_keys<\/code>, les permissions sont incorrectes, ou <code>PubkeyAuthentication<\/code> est d\u00e9sactiv\u00e9 sur le serveur.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Diagnostic c\u00f4t\u00e9 client\nssh -vvv utilisateur@serveur 2>&amp;1 | grep -A2 \"Offering\\|Server accepts\\|denied\"\n\n# Diagnostic c\u00f4t\u00e9 serveur\nsudo journalctl -u sshd -n 50 --no-pager | grep -i \"auth\\|key\\|denied\"\n\n# Sur les syst\u00e8mes sans journald\nsudo tail -50 \/var\/log\/auth.log | grep -i ssh<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-2-too-many-authentication-failures\">Erreur 2 : Too many authentication failures<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> ssh-agent propose trop de cl\u00e9s et le serveur atteint <code>MaxAuthTries<\/code> avant que la bonne cl\u00e9 soit essay\u00e9e.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i ~\/.ssh\/id_ed25519 -o IdentitiesOnly=yes utilisateur@serveur<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-3-warning-remote-host-identification-has-changed\">Erreur 3 : WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> L&#8217;empreinte du serveur a chang\u00e9 (r\u00e9installation, migration). V\u00e9rifiez physiquement l&#8217;empreinte avant de supprimer l&#8217;entr\u00e9e, car cette erreur peut aussi indiquer une attaque man-in-the-middle.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Sur le serveur, r\u00e9cup\u00e9rez l'empreinte actuelle\nsudo ssh-keygen -l -f \/etc\/ssh\/ssh_host_ed25519_key.pub\n\n# Sur le client, supprimez l'ancienne entr\u00e9e apr\u00e8s v\u00e9rification\nssh-keygen -R 192.168.1.100<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-4-could-not-open-a-connection-to-your-authentication-agent\">Erreur 4 : Could not open a connection to your authentication agent<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> ssh-agent n&#8217;est pas d\u00e9marr\u00e9 ou la variable d&#8217;environnement <code>SSH_AUTH_SOCK<\/code> n&#8217;est pas d\u00e9finie.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>eval \"$(ssh-agent -s)\"\nssh-add ~\/.ssh\/id_ed25519<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-5-no-supported-authentication-methods-available\">Erreur 5 : No supported authentication methods available<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> Le serveur n&#8217;accepte que l&#8217;authentification par cl\u00e9, mais aucune cl\u00e9 valide n&#8217;est propos\u00e9e. V\u00e9rifiez que ssh-agent contient votre cl\u00e9 (<code>ssh-add -l<\/code>) et que <code>~\/.ssh\/config<\/code> pointe vers la bonne cl\u00e9 pour cet h\u00f4te.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-6-bad-permissions-on-home-user-ssh\">Erreur 6 : Bad permissions on \/home\/user\/.ssh<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> StrictModes d\u00e9tecte des permissions trop ouvertes sur le r\u00e9pertoire home ou <code>~\/.ssh<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -ld ~ ~\/.ssh ~\/.ssh\/authorized_keys\nchmod 755 ~\nchmod 700 ~\/.ssh\nchmod 600 ~\/.ssh\/authorized_keys<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-7-connection-refused-port-22\">Erreur 7 : Connection refused (port 22)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> Le service SSH n&#8217;\u00e9coute pas sur le port 22, ou un pare-feu bloque la connexion.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># V\u00e9rifier le statut du service\nsudo systemctl status sshd\n\n# V\u00e9rifier les ports d'\u00e9coute\nsudo ss -tlnp | grep ssh\n\n# Tester un port alternatif\nssh -p 2222 utilisateur@serveur<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"erreur-8-load-key-bad-permissions\">Erreur 8 : Load key: bad permissions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cause :<\/strong> Les permissions de la cl\u00e9 priv\u00e9e sont trop ouvertes, d&#8217;autres utilisateurs peuvent la lire.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 ~\/.ssh\/id_ed25519\nls -la ~\/.ssh\/id_ed25519\n# Attendu : -rw------- 1 utilisateur utilisateur ...<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conseils-avances-cles-materielles-et-certificats-ssh\">Conseils avanc\u00e9s : cl\u00e9s mat\u00e9rielles et certificats SSH<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour les environnements \u00e0 haute s\u00e9curit\u00e9, plusieurs techniques avanc\u00e9es permettent d&#8217;aller bien au-del\u00e0 des cl\u00e9s logicielles stock\u00e9es sur disque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cl\u00e9s SSH sur YubiKey :<\/strong> Depuis OpenSSH 8.2, les types de cl\u00e9s <code>ed25519-sk<\/code> et <code>ecdsa-sk<\/code> permettent de g\u00e9n\u00e9rer des cl\u00e9s SSH dont la partie priv\u00e9e r\u00e9side sur un dispositif FIDO2 (YubiKey, SoloKey). La cl\u00e9 priv\u00e9e ne quitte jamais le hardware, m\u00eame si votre machine est compromise.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># G\u00e9n\u00e9rer une cl\u00e9 SSH r\u00e9sidente sur YubiKey (n\u00e9cessite OpenSSH 8.2+ et libfido2)\nssh-keygen -t ed25519-sk -O resident -C \"yubikey-prod-2026\"\n\n# R\u00e9cup\u00e9rer les cl\u00e9s r\u00e9sidentes sur une nouvelle machine\nssh-keygen -K<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Certificats SSH :<\/strong> Pour les \u00e9quipes de plus de 10 personnes, la gestion des <code>authorized_keys<\/code> sur chaque serveur devient rapidement ing\u00e9rable. Les certificats SSH permettent \u00e0 chaque serveur de faire confiance \u00e0 une Autorit\u00e9 de Certification (CA SSH), \u00e9liminant la n\u00e9cessit\u00e9 de d\u00e9ployer des cl\u00e9s individuelles. Chaque utilisateur re\u00e7oit un certificat sign\u00e9 par la CA, avec une dur\u00e9e de validit\u00e9 limit\u00e9e.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Cr\u00e9er une CA SSH (sur un serveur de gestion s\u00e9curis\u00e9)\nssh-keygen -t ed25519 -f \/etc\/ssh\/ca_utilisateurs -C \"CA SSH Production 2026\"\n\n# Signer la cl\u00e9 d'un utilisateur (validit\u00e9 30 jours)\nssh-keygen -s \/etc\/ssh\/ca_utilisateurs \\\n  -I \"prenom.nom@entreprise.fr\" \\\n  -n deployer,admin \\\n  -V +30d \\\n  ~\/.ssh\/id_ed25519.pub\n\n# Sur chaque serveur cible, faire confiance \u00e0 la CA\necho \"TrustedUserCAKeys \/etc\/ssh\/ca_utilisateurs.pub\" | sudo tee -a \/etc\/ssh\/sshd_config\nsudo systemctl reload sshd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Audit des cl\u00e9s SSH :<\/strong> Examinez r\u00e9guli\u00e8rement les cl\u00e9s autoris\u00e9es sur vos serveurs. Des cl\u00e9s orphelines d&#8217;anciens collaborateurs ou de services d\u00e9pr\u00e9ci\u00e9s repr\u00e9sentent un risque permanent souvent sous-estim\u00e9.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Trouver tous les fichiers authorized_keys sur le syst\u00e8me\nsudo find \/home \/root \/etc -name \"authorized_keys\" -type f 2>\/dev\/null\n\n# Surveiller les connexions SSH r\u00e9ussies\nlast -n 20 | grep -v \"^$\"\n\n# Analyser les tentatives d'authentification \u00e9chou\u00e9es par IP\nsudo grep \"Failed password\" \/var\/log\/auth.log | \\\n  awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"faq-cles-ssh-en-2026\">FAQ : cl\u00e9s SSH en 2026<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quelle-est-la-difference-entre-ed25519-et-rsa-pour-ssh\">Quelle est la diff\u00e9rence entre Ed25519 et RSA pour SSH ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 utilise la courbe elliptique Curve25519, produit des cl\u00e9s courtes (68 octets contre ~800 pour RSA 4096), et signe les donn\u00e9es plus rapidement. Une cl\u00e9 Ed25519 de 256 bits offre une s\u00e9curit\u00e9 comparable \u00e0 une cl\u00e9 RSA de 3 000 bits. Ed25519 est d\u00e9terministe, contrairement \u00e0 ECDSA. Choisissez Ed25519 pour tout nouveau d\u00e9ploiement. Utilisez RSA 4096 uniquement pour la compatibilit\u00e9 avec des syst\u00e8mes ne supportant pas Ed25519.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dois-je-utiliser-une-phrase-de-passe-pour-ma-cle-ssh\">Dois-je utiliser une phrase de passe pour ma cl\u00e9 SSH ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Oui, dans la quasi-totalit\u00e9 des cas. Une phrase de passe d&#8217;au moins 14 caract\u00e8res chiffre votre cl\u00e9 priv\u00e9e sur disque. Si votre machine est vol\u00e9e ou compromise, la cl\u00e9 reste inutilisable. Utilisez <code>ssh-agent<\/code> pour ne saisir la phrase de passe qu&#8217;une fois par session. Sur macOS, le trousseau Keychain la m\u00e9morise entre les red\u00e9marrages, ce qui \u00e9limine toute friction au quotidien.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ou-dois-je-stocker-mes-cles-ssh\">O\u00f9 dois-je stocker mes cl\u00e9s SSH ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les cl\u00e9s SSH se stockent dans <code>~\/.ssh\/<\/code> avec des permissions strictes (700 pour le r\u00e9pertoire, 600 pour les fichiers de cl\u00e9s priv\u00e9es). Pour une s\u00e9curit\u00e9 maximale, stockez les cl\u00e9s priv\u00e9es sur un dispositif mat\u00e9riel comme un YubiKey ou une TPM. Ne sauvegardez jamais les cl\u00e9s priv\u00e9es dans un service cloud non chiffr\u00e9 sans chiffrement suppl\u00e9mentaire comme VeraCrypt ou GPG.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-savoir-si-ma-connexion-utilise-lauthentification-par-cle\">Comment savoir si ma connexion utilise l&#8217;authentification par cl\u00e9 ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Utilisez <code>ssh -v utilisateur@serveur<\/code> et cherchez la ligne <code>Authentication succeeded (publickey)<\/code>. Si vous voyez <code>Authentication succeeded (password)<\/code>, la connexion utilise le mot de passe. Vous pouvez forcer l&#8217;authentification par cl\u00e9 uniquement avec <code>ssh -o PasswordAuthentication=no utilisateur@serveur<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"peut-on-utiliser-la-meme-cle-ssh-sur-plusieurs-serveurs\">Peut-on utiliser la m\u00eame cl\u00e9 SSH sur plusieurs serveurs ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Techniquement oui, mais ce n&#8217;est pas la meilleure pratique. Si la cl\u00e9 est compromise, tous les serveurs o\u00f9 elle est d\u00e9ploy\u00e9e sont expos\u00e9s simultan\u00e9ment. Utilisez des cl\u00e9s distinctes par environnement (d\u00e9veloppement, staging, production) ou par service. Cela limite l&#8217;impact d&#8217;une compromission et facilite la r\u00e9vocation cibl\u00e9e sans affecter les autres acc\u00e8s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"comment-desactiver-lacces-ssh-dun-utilisateur-sans-le-supprimer\">Comment d\u00e9sactiver l&#8217;acc\u00e8s SSH d&#8217;un utilisateur sans le supprimer ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Deux m\u00e9thodes : (1) supprimez sa ligne dans <code>~\/.ssh\/authorized_keys<\/code>, ou (2) ajoutez son nom \u00e0 <code>DenyUsers<\/code> dans <code>\/etc\/ssh\/sshd_config<\/code> avec la directive <code>DenyUsers ex-employe<\/code>. La deuxi\u00e8me m\u00e9thode est plus robuste car elle s&#8217;applique m\u00eame si la cl\u00e9 est r\u00e9ajout\u00e9e ult\u00e9rieurement par erreur.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quelle-est-la-difference-entre-ssh-keygen-t-ed25519-et-t-ecdsa\">Quelle est la diff\u00e9rence entre ssh-keygen -t ed25519 et -t ecdsa ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Les deux utilisent des courbes elliptiques, mais ECDSA emploie des courbes NIST (P-256, P-384, P-521) dont les param\u00e8tres de g\u00e9n\u00e9ration suscitent des interrogations chez certains cryptographes. ECDSA n\u00e9cessite un bon g\u00e9n\u00e9rateur al\u00e9atoire \u00e0 chaque signature et est vuln\u00e9rable si ce g\u00e9n\u00e9rateur est d\u00e9faillant. Ed25519 utilise Curve25519 avec une signature d\u00e9terministe, \u00e9liminant ce risque. Choisissez toujours Ed25519.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ssh-copy-id-ne-fonctionne-pas-que-faire\">ssh-copy-id ne fonctionne pas : que faire ?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si <code>ssh-copy-id<\/code> \u00e9choue, copiez manuellement votre cl\u00e9 publique. Affichez-la avec <code>cat ~\/.ssh\/id_ed25519.pub<\/code>, connectez-vous au serveur par un autre moyen (console VPS, acc\u00e8s physique), puis ajoutez la cl\u00e9 avec <code>echo \"VOTRE_CLE_PUBLIQUE\" &gt;&gt; ~\/.ssh\/authorized_keys<\/code>. V\u00e9rifiez ensuite les permissions avec <code>chmod 600 ~\/.ssh\/authorized_keys<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"couverture-connexe\">Couverture connexe<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour renforcer davantage la s\u00e9curit\u00e9 de vos serveurs et applications :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"\/fr\/tls-1-3-vs-tls-1-2\/\">TLS 1.3 vs TLS 1.2 : 40 % plus rapide, 5 CVE [2026]<\/a><\/li>\n<li><a href=\"\/fr\/lets-encrypt-vs-ssl-payant\/\">Let&#8217;s Encrypt vs SSL Payant : 762M de Sites, 0 \u20ac vs 170 \u20ac\/an [2026]<\/a><\/li>\n<li><a href=\"\/fr\/security-headers-nodejs\/\">En-t\u00eates de S\u00e9curit\u00e9 HTTP en Node.js : 12 \u00c9tapes, 30 Min [2026]<\/a><\/li>\n<li><a href=\"\/fr\/owasp-top-10-nodejs\/\">OWASP Top 10 Node.js : S\u00e9curisez votre API en 12 \u00c9tapes [2026]<\/a><\/li>\n<li><a href=\"\/fr\/oauth2-nodejs\/\">OAuth2 en Node.js : 12 \u00c9tapes, 30 Min [2026]<\/a><\/li>\n<li><a href=\"\/fr\/wireshark-analyse-reseau-tutoriel\/\">Wireshark : analyser le trafic r\u00e9seau en 12 \u00e9tapes [2026]<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sources :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.openssh.com\/manual.html\" rel=\"nofollow noopener\" target=\"_blank\">Documentation officielle OpenSSH<\/a><\/li>\n<li><a href=\"https:\/\/docs.github.com\/fr\/authentication\/connecting-to-github-with-ssh\/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent\" rel=\"nofollow noopener\" target=\"_blank\">Guide SSH GitHub (fran\u00e7ais)<\/a><\/li>\n<li><a href=\"https:\/\/www.cyber.gouv.fr\/\" rel=\"nofollow noopener\" target=\"_blank\">ANSSI, Agence Nationale de la S\u00e9curit\u00e9 des Syst\u00e8mes d&#8217;Information<\/a><\/li>\n<li><a href=\"https:\/\/man.openbsd.org\/ssh-keygen\" rel=\"nofollow noopener\" target=\"_blank\">Page man ssh-keygen (OpenBSD)<\/a><\/li>\n<li><a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8709\" rel=\"nofollow noopener\" target=\"_blank\">RFC 8709 : Ed25519 et Ed448 pour SSH (IETF)<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>L&#8217;authentification par cl\u00e9 SSH prot\u00e8ge vos serveurs contre 99 % des attaques automatis\u00e9es bas\u00e9es sur les mots de passe. Ce tutoriel vous guide \u00e0 travers 12 \u00e9tapes pour g\u00e9n\u00e9rer, configurer\u2026<\/p>\n","protected":false},"author":3,"featured_media":261,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,3],"tags":[],"class_list":["post-260","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\/260","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\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/comments?post=260"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/260\/revisions"}],"predecessor-version":[{"id":262,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/posts\/260\/revisions\/262"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media\/261"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/media?parent=260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/categories?post=260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/fr\/wp-json\/wp\/v2\/tags?post=260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}