Souba SOUBA

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

8 choses que tu ignorais sur SSH

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.

bash
ssh -J rebond.exemple.com serveur.interne
ProxyJump : sauter sans exposer l'agent

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.

bash
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
Trois directions de tunnel : local, inverse, dynamique

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 OpenSSHStatut face à regreSSHion
Avant 4.4p1 (non patché)Vulnérable
4.4p1 à 8.5p1Non vulnérable
8.5p1 à 9.8p1Vulné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.

bash
# 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
Réactiver ssh-rsa : solution temporaire, jamais permanente

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équenceEffet
~.Termine net une session figée
~COuvre une ligne de commande (ajouter un tunnel à chaud)
~#Liste les connexions redirigées en cours
~?Affiche toutes les séquences disponibles
~ puis Ctrl-ZMet 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.

bash
# Dans ~/.ssh/config
Host *
    ControlMaster auto
    ControlPath ~/.ssh/cm-%r@%h:%p
    ControlPersist 10m
Multiplexing : une connexion partagée, des sessions instantanées

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

  1. [01] OpenSSH 8.8 — Release Notes OpenSSH · openssh.org Désactivation de la signature ssh-rsa (SHA-1) par défaut, 26 septembre 2021.
  2. [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).
  3. [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.
  4. [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.
  5. [05] man ssh — forwarding, tunnels et caractères d'échappement OpenBSD · man.openbsd.org Options -A, -L, -R, -D et section ESCAPE CHARACTERS.
  6. [06] man ssh_config — ControlMaster et ControlPersist OpenBSD · man.openbsd.org Multiplexing des connexions SSH.
  7. [07] man ssh-keygen — certificats SSH OpenBSD · man.openbsd.org Signature de certificats hôte et utilisateur via une autorité de certification.
  8. [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.
  9. [09] OpenSSH — Release Notes OpenSSH · openssh.com ed25519 par défaut ; historique des versions et correctifs.
sshopensshsécuritéréseauterminaltunneltofuregresshioncertificats ssh

Aussi dans Secrets