8 choses que tu ignorais sur SSH
Le côté caché de l'outil que tu ouvres tous les jours : confiance aveugle, clés mal comprises, tunnels qui traversent ton pare-feu.
7 min · 25 juin 2026 · 5 min de lecture
En bref
SSH paraît simple : une clé, une connexion, un shell. Derrière, huit pièges que presque personne ne regarde — de la confiance accordée à l'aveugle jusqu'au RCE qui a frappé OpenSSH en 2024. Tout est vérifié et sourcé.
Chapitres
Tu ouvres une session SSH dix fois par jour. Une clé, une commande, un shell : ça marche, donc tu n'y penses plus. Le problème est là. Derrière cette routine, il y a des clés mal comprises, des portes laissées ouvertes et une confiance que tu accordes sans le savoir. Voilà huit choses qui se passent dans ton dos.
1. La première connexion, tu la fais à l'aveugle
Première connexion à un serveur. SSH t'affiche une empreinte et te pose une question : tu continues ? Tu tapes « yes », sans rien vérifier. L'empreinte file dans known_hosts, et SSH fera confiance à cette machine pour toujours. Voilà le paradoxe. Tout le protocole repose sur l'identité prouvée. Mais sur la connexion la plus risquée, la toute première, il te demande de ne rien contrôler. C'est le modèle TOFU, Trust On First Use. Un attaquant glissé entre toi et le serveur ce jour-là devient le serveur. Et tu ne le sauras jamais.
2. L'agent forwarding offre ta clé sans la donner
Tu sautes vers un serveur en passant par une machine de rebond. Pour ne pas retaper ta clé à chaque saut, tu actives l'agent forwarding avec l'option -A. Pratique, recommandé partout. Et c'est là le piège. Sur le rebond, SSH crée une socket reliée à ton agent, resté chez toi. Quiconque a les droits root sur ce rebond peut s'en servir. Il ne vole pas ta clé. Il s'en sert, en ton nom, pour ouvrir d'autres serveurs.
Agent forwarding should be enabled with caution.
— OpenSSH — man ssh_config (ForwardAgent)
Ce que tu crois
- L'agent forwarding est pratique et sans risque
- Ma clé reste sur mon poste, donc elle est protégée
- Le rebond ne peut rien faire de ma session
La réalité
- Root sur le rebond pilote ton agent
- Il s'authentifie en ton nom, sans jamais voir ta clé
- Déplacement latéral quasi indétectable (MITRE T1563.001)
→ Sur un rebond, utilise ProxyJump (ssh -J), pas l'agent forwarding.
La parade
Sur un rebond, tu n'as pas besoin de l'agent. ProxyJump fait le même travail sans exposer ta clé : ton client garde la main de bout en bout, et rien ne traîne sur la machine intermédiaire.
ssh -J rebond.exemple.com serveur.interne 3. SSH traverse ton pare-feu, dans le mauvais sens
SSH ne transporte pas que ton shell. Il transporte n'importe quel flux TCP. Tu peux pousser un port local vers le serveur, tirer un port distant vers toi, ou monter un proxy complet. C'est un VPN que tu as déjà sous la main.
ssh -L 8080:interne:80 serveur # pousser un port local vers le distant
ssh -R 2222:localhost:22 externe # la machine interne rouvre sa porte dehors
ssh -D 1080 serveur # proxy SOCKS : SSH devient un VPN Le tunnel inverse
Une machine coincée derrière un pare-feu sort en SSH vers l'extérieur. Légitime : le pare-feu ne filtre que l'entrant. Mais ce tunnel rouvre une porte vers la machine interne. La connexion part de l'intérieur, donc personne ne la bloque. C'est exactement comme ça qu'une backdoor rappelle son opérateur.
4. OpenSSH a eu son premier RCE root en presque vingt ans
OpenSSH, c'est la référence : audité, durci, partout. Et pourtant. Juillet 2024, la faille regreSSHion. Exécution de code à distance, sans authentification, en root, dans la configuration par défaut. Le détail vertigineux ? C'était un bug déjà corrigé. En 2006. Une régression l'a fait revenir dix-huit ans plus tard, d'où le nom. La cause technique : une condition de course dans un gestionnaire de signal. L'exploitation reste difficile, plusieurs heures de tentatives. Mais la leçon est claire.
14millions
d'instances OpenSSH exposées, potentiellement vulnérables
source : Qualys — CVE-2024-6387, juillet 2024
| Versions OpenSSH | Statut face à regreSSHion |
|---|---|
| Avant 4.4p1 (non patché) | Vulnérable |
| 4.4p1 à 8.5p1 | Non vulnérable |
| 8.5p1 à 9.8p1 | Vulnérable |
| 9.8p1 et au-delà | Corrigé |
5. Ta clé « ssh-rsa » n'est pas une clé RSA morte
Un jour, ta connexion casse. Le message : algorithme de signature refusé. Le coupable affiché : ssh-rsa. Réflexe de panique : RSA est mort, je regénère tout en ed25519. Erreur. Ce n'est pas RSA qui est mort, c'est SHA-1. Depuis OpenSSH 8.8, en septembre 2021, la signature ssh-rsa, qui repose sur SHA-1, est désactivée par défaut. Ta clé RSA, elle, va très bien : depuis OpenSSH 7.2, elle signe déjà en SHA-256. Le problème n'apparaît que face à un serveur trop vieux.
Ce que tu crois
- ssh-rsa désactivé veut dire RSA obsolète
- Il faut regénérer une clé ed25519 en urgence
- Mes vieilles clés RSA sont devenues dangereuses
La réalité
- C'est la signature SHA-1 qui est bannie, pas RSA
- Ta clé RSA signe déjà en SHA-256 depuis OpenSSH 7.2
- Ça ne casse que face à une implémentation trop vieille
→ Garde ta clé RSA, ou passe à ed25519 par confort — pas par panique.
# Le message qui déclenche la panique :
no mutual signature algorithm
# Parler à un vieux serveur, en dernier recours seulement :
Host vieux-serveur
PubkeyAcceptedAlgorithms +ssh-rsa 6. Ton client SSH cache une interface secrète
Ta session SSH se fige, le serveur ne répond plus. Réflexe : tu fermes brutalement le terminal. Mauvaise idée. Ton client écoute un caractère d'échappement, le tilde, en début de ligne (après Entrée). C'est une petite console cachée, présente dans chaque session. Presque personne ne le sait. Pourtant, c'est dans le manuel, section ESCAPE CHARACTERS.
| Séquence | Effet |
|---|---|
| ~. | Termine net une session figée |
| ~C | Ouvre une ligne de commande (ajouter un tunnel à chaud) |
| ~# | Liste les connexions redirigées en cours |
| ~? | Affiche toutes les séquences disponibles |
| ~ puis Ctrl-Z | Met la session SSH en arrière-plan |
7. Une seule connexion peut servir dix sessions
Chaque connexion SSH coûte : échange de clés, authentification, négociation, à chaque fois. Sauf si tu actives le multiplexing. La première connexion reste ouverte en arrière-plan, les suivantes l'empruntent. Plus de poignée de main à répéter, une nouvelle session s'ouvre presque instantanément. C'est le covoiturage : une seule voiture fait le trajet, tous les passagers montent dedans. Ansible, l'outil d'automatisation, repose là-dessus pour aller vite.
# Dans ~/.ssh/config
Host *
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m 8. Les certificats SSH font disparaître le known_hosts hell
Reviens au premier fait : le problème de la première connexion, le fichier known_hosts qui gonfle, les authorized_keys éparpillés sur chaque serveur. Tout le monde vit là-dedans. Presque personne ne connaît la sortie. OpenSSH sait signer des certificats — pas seulement des clés, des certificats, comme une carte d'identité. Une autorité de certification, ta CA, signe les clés des serveurs et celles des utilisateurs. Tu fais confiance à la CA une seule fois. Plus de TOFU, plus de known_hosts à maintenir, et un certificat peut même expirer tout seul.
Durcir ton SSH en 6 réflexes
Si tu ne retiens qu'une chose de cette page, retiens cette liste.
- Vérifie l'empreinte d'un serveur au premier contact, par un canal de confiance.
- Sur un rebond, utilise ProxyJump (ssh -J), jamais l'agent forwarding.
- Désactive l'agent forwarding et tout forwarding inutile sur tes bastions.
- Préfère une clé ed25519, et ne garde RSA que si tu sais pourquoi.
- Tiens OpenSSH à jour : regreSSHion a frappé la configuration par défaut.
- Pour une flotte, passe aux certificats SSH plutôt que de distribuer des clés à la main.
À retenir
- →La première connexion SSH s'accepte sans vérification : c'est le modèle TOFU.
- →L'agent forwarding laisse root sur le rebond utiliser ta clé sans jamais la voler.
- →Un tunnel SSH inverse traverse le pare-feu, qui ne filtre que l'entrant.
- →regreSSHion (2024) : un bug OpenSSH de 2006 ressuscité, 14 millions d'instances exposées.
- →ssh-rsa désactivé ne veut pas dire RSA mort : c'est la signature SHA-1 qui tombe.
- →Les certificats SSH suppriment le TOFU et le known_hosts hell.
Sources · la preuve
- [01] OpenSSH 8.8 — Release Notes OpenSSH · openssh.org Désactivation de la signature ssh-rsa (SHA-1) par défaut, 26 septembre 2021.
- [02] regreSSHion : RCE non authentifié dans OpenSSH (CVE-2024-6387) Qualys · blog.qualys.com Plus de 14 millions d'instances exposées ; régression de CVE-2006-5051 (2006).
- [03] SSH Hijacking (T1563.001) MITRE ATT&CK · attack.mitre.org Détournement de session et d'agent SSH pour le déplacement latéral.
- [04] SHA-1 is a Shambles : première collision chosen-prefix sur SHA-1 Leurent & Peyrin (IACR, 2020) · eprint.iacr.org Collision SHA-1 réalisable pour moins de 50 000 dollars.
- [05] man ssh — forwarding, tunnels et caractères d'échappement OpenBSD · man.openbsd.org Options -A, -L, -R, -D et section ESCAPE CHARACTERS.
- [06] man ssh_config — ControlMaster et ControlPersist OpenBSD · man.openbsd.org Multiplexing des connexions SSH.
- [07] man ssh-keygen — certificats SSH OpenBSD · man.openbsd.org Signature de certificats hôte et utilisateur via une autorité de certification.
- [08] RFC 4251 — The Secure Shell (SSH) Protocol Architecture IETF · rfc-editor.org Modèle de confiance des clés d'hôte, base du TOFU.
- [09] OpenSSH — Release Notes OpenSSH · openssh.com ed25519 par défaut ; historique des versions et correctifs.