Guide des séquences d'échappement SSH : réparer instantanément les sessions SSH gelées
Chaque utilisateur de Linux a déjà tué une session SSH gelée de manière brutale. Mais il existe un menu d'évasion intégré — tranquillement présent dans OpenSSH — qui résout ce problème en moins d'une seconde. Dans ce tutoriel, nous apprendrons tout ce que vous devez savoir sur les séquences d'évasion SSH (ou caractères) et comment et quand les utiliser.
Résumé rapide
- Le client OpenSSH inclut Séquences d'échappement (Caractères). Ce sont des combinaisons de touches spéciales qui contrôlent le client SSH local.
- Par exemple, lorsque SSH se fige, appuyez sur
Entréepuis tapez~.pour fermer instantanément votre session. Aucun besoin de tuer le terminal. - Les séquences d'évasion SSH s'exécutent entièrement sur votre machine locale, et non sur le serveur distant. C'est pourquoi elles fonctionnent même lorsque le serveur est en panne ou que le réseau est coupé. C'est un canal de contrôle parallèle intégré directement dans le client.
- Vous pouvez utiliser le multiplicateur de tilde pour les sessions imbriquées. Si vous êtes à trois sauts de profondeur (par exemple local → bastion → prod), taper
~~~.ferme uniquement la session la plus interne tout en laissant celle du milieu intacte. Chaque tilde supprime exactement une couche. La plupart des gens ne réalisent pas que SSH suit toute la chaîne de sauts et dirige les commandes d'évasion en conséquence. - Les séquences d'échappement ne fonctionnent que lorsqu'elles sont tapées immédiatement après avoir appuyé sur Entrée. Cela permet au client SSH de les distinguer des commandes normales.
Introduction
Imaginez cela. Vous êtes trois niveaux en profondeur dans un serveur de production. Votre session SSH se fige. Le curseur clignote. Rien ne bouge. Alors vous faites ce que tout le monde fait, c'est-à-dire que vous forcez la fermeture de la fenêtre du terminal, en ouvrez une nouvelle et vous vous reconnectez. Toute l'opération prend deux minutes et casse complètement votre concentration.
Mais vous n'avez jamais eu à faire cela. OpenSSH est livré avec un menu de contrôle intégré ou un menu d'échappement depuis le début des années 2000. Il fonctionne même lorsque le serveur distant est complètement hors service. Son utilisation prend une seconde. Et presque personne ne sait qu'il existe.
Aujourd'hui, nous allons y remédier. Au moment où vous aurez terminé cet article, vous ne tuerez plus jamais une fenêtre de terminal à cause d'une session SSH bloquée.
Note clé : OpenSSH est livré avec un menu d'évasion intégré depuis le début des années 2000. Il fonctionne même lorsque le serveur distant est complètement inactif. Et presque personne ne sait qu'il existe.
Qu'est-ce que le menu d'échappement SSH ou le menu secret ?
Le client SSH inclut des Séquences d'échappement (Caractères). Ce sont des combinaisons de touches spéciales qui contrôlent le client SSH local, et non le serveur distant.
Ce menu intégré vous permet de :
- Tuer instantanément une session SSH gelée
- Créer un transfert de port alors que vous êtes déjà connecté
- Mettre une session SSH en arrière-plan
- Voir les tunnels SSH actifs
- Contrôler la sortie de débogage SSH
En bref, cela vous donne un contrôle direct sur le client SSH, même lorsque le système distant cesse de répondre.
Normalement, tout ce que vous tapez dans une session SSH est envoyé à la machine distante. Cependant, les séquences d'échappement interrompent ce flux. Le client SSH les capture localement avant d'envoyer quoi que ce soit au serveur.
Cette conception est importante car elle vous permet de contrôler SSH même lorsque la connexion se bloque.
Comment fonctionnent les caractères d'échappement (séquences) dans SSH
Avant de passer aux commandes, comprenons ce qui rend ces séquences spéciales.
Comme je l'ai dit plus tôt, lorsque vous vous connectez en SSH à un serveur, vos frappes au clavier passent normalement directement à la machine distante. Vous tapez, le système distant répond. Simple.
Keyboard → SSH client → Remote serverMais SSH possède également un deuxième mode d'écoute parallèle. Votre client SSH local surveille discrètement chaque frappe à la recherche d'un déclencheur spécifique : un caractère tilde (~) tapé juste après un retour à la ligne. Lorsqu'il repère ce motif, il intercepte l'entrée et considère le caractère suivant comme une commande — une commande qui ne quitte jamais votre machine.
En raison de cette conception, les séquences d'échappement sont complètement indépendantes du serveur distant. Le système distant peut être planté, gelé ou inaccessible — et ces commandes fonctionnent toujours parfaitement, car votre client SSH local les gère entièrement par lui-même.
La règle importante : Les séquences d'échappement ne s'activent qu'au début d'une nouvelle ligne. Cela signifie : les séquences d'échappement fonctionnent uniquement immédiatement après avoir appuyé sur la touche Entrée. Vous devez donc toujours appuyer d'abord sur la touche
Entrée, puis taper votre séquence. Si vous la tapez au milieu d'une ligne, SSH la considère comme du texte brut et l'envoie au système distant.
Comment ouvrir le menu d'échappement SSH
Pour accéder au menu d'évasion, suivez ces trois étapes à chaque fois :
- Appuyez sur
Entréepour déplacer votre curseur vers une nouvelle ligne. - Tapez
~?(tilde puis point d'interrogation). Vous ne verrez pas les caractères apparaître lorsque vous les tapez. - La liste complète des séquences d'échappement prises en charge apparaît immédiatement sur votre écran.
Voici à quoi ressemble le menu secret SSH :
ostechnix@fedora:~$ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~R - request rekey
~V/v - decrease/increase verbosity (LogLevel)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)Cette liste est le menu de contrôle (ou d’échappement) SSH.
Vous pouvez remarquer que les caractères n'apparaissent pas tels que vous les tapez. Cela est intentionnel. Le client SSH intercepte localement les séquences d'échappement et les gère lui-même au lieu de les envoyer au shell distant.
Expliquer les séquences d'échappement
Le menu répertorie dix séquences d'échappement. La plupart des développeurs n'ont besoin que de deux ou trois d'entre elles. Mais comprendre toutes ces séquences fait de vous la personne au travail qui a toujours la réponse.
| Clés | Nom | Ce que cela fait |
|---|---|---|
~. | Sortie forcée | Interrompt la connexion instantanément. Fonctionne même lorsque le serveur est complètement insensible. C'est celui que vous utiliserez le plus souvent. |
~C | Ligne de commande SSH | Ouvre une invite SSH interactive en cours de session. À partir de là, vous pouvez ajouter ou supprimer des règles de transfert de port sans vous déconnecter. Tapez help à l'intérieur. |
~# | Lister les redirections de port | Affiche une liste de toutes les connexions de transfert de port actives dans la session en cours. |
~B | Envoyer BREAK | Envoie un signal BREAK matériel au système distant. Utile pour les consoles série, les routeurs ou les appareils embarqués. |
~R | Demander un renouvellement de clé | Initie un nouvel échange de clés cryptographiques en cours de session. Utile pour les sessions de longue durée dans des environnements sensibles à la sécurité. |
~V/~v | Ajuster la verbosité | Augmente ou diminue la verbosité des journaux SSH en temps réel. Utile pour déboguer une connexion active sans se reconnecter. |
~^Z | Suspendre | Suspend le processus SSH localement. Exécutez fg pour ramener la session au premier plan. |
~& | Contexte | Déplace SSH en arrière-plan pendant qu'il attend que les connexions transférées actives se ferment. La connexion reste active. |
~~ | Tilde littérale | Envoie un véritable caractère tilde au système distant. Tapez-le deux fois pour en passer un. |
~? | Afficher l'aide | Affiche à nouveau le menu d'échappement. Un rappel utile lorsque vous oubliez quelle touche fait quoi. |
Comment utiliser les séquences d'échappement SSH
1. Tuer instantanément une session SSH gelée avec ~. (Forcer la fermeture d’un SSH bloqué)
Donons à ~. l'attention qu'il mérite, car cette seule commande vaut la peine de lire tout cet article.
Lorsque qu'une session SSH se bloque, les options habituelles sont misérables. Vous pouvez attendre quelques minutes ou plus, en espérant que le délai d'expiration TCP nettoie finalement les choses. Vous pouvez fermer toute la fenêtre du terminal. Ou vous pouvez traquer l'ID de processus SSH depuis un second terminal et le tuer manuellement. Toutes ces options font perdre du temps.
Avec ~., rien de tout cela n'est nécessaire. Vous appuyez sur Entrée, tapez ~., et la session se ferme en moins d'une seconde.
Enter
~.Cette commande termine immédiatement la connexion SSH et votre invite locale revient immédiatement. Pas d'attente. Pas de deuxième terminal. Pas besoin de souris.
Remarque : les étapes exactes lorsque votre session se bloque : Appuyez sur
Entrée→ tapez~→ tapez.
Vous verrezConnexion à [hôte] fermée.apparaître à l'écran, et votre invite de commande locale réapparaîtra.
Cela fonctionne parce que votre client SSH local gère entièrement la commande ~. tout seul. Il n'a pas besoin de la coopération du serveur distant. Il se contente de fermer la connexion TCP et de vous rendre le contrôle.
Pourquoi cela importe :
- Le serveur distant peut cesser de répondre.
- La connexion réseau peut se couper.
- Le shell peut se bloquer.
Dans ces cas, Ctrl+C ne fait rien, car ce signal est envoyé au shell distant. Cependant, ~. communique directement avec le client SSH. Le client ferme la connexion instantanément.
De nombreux administrateurs Linux expérimentés considèrent cela comme une astuce SSH incontournable.
2. Transfert de port à la volée avec ~C
La deuxième commande la plus utile est ~C, et elle résout un problème qui prend de nombreux développeurs au dépourvu. Imaginez que vous êtes déjà dans une session SSH et que vous vous rendez compte que vous avez oublié de configurer un transfert de port lors de la connexion. Normalement, la seule solution consiste à se déconnecter et à se reconnecter avec les bons indicateurs -L.
Mais avec ~C, vous n'avez pas besoin de vous reconnecter. Appuyer sur Entrée puis sur ~C ouvre une invite interactive ssh> directement dans votre session en cours. De là, vous pouvez ajouter des règles de transfert de port locales ou distantes, annuler celles existantes et vérifier ce qui est actif — tout cela sans interrompre votre connexion.
Exemple rapide
Appuyez sur Entrée, tapez ~C.
Vous verrez quelque chose comme ceci :
ssh>À l'invite ssh>, tapez :
-L 8080:localhost:80Cela transfère votre port local 8080 vers le port 80 sur le serveur distant. Ensuite, appuyez sur Entrée et votre session continue exactement comme avant, avec le nouveau tunnel actif.
Tapez help à l'invite ssh> pour voir toutes les sous-commandes disponibles.
Normalement, vous devez vous reconnecter pour créer un tunnel. Cette fonctionnalité évite cette étape.
3. Sessions imbriquées et le multiplicateur tilde
Voici où les choses deviennent intéressantes. De nombreux développeurs passent par des hôtes de saut ou des serveurs bastion — vous vous connectez en SSH à la machine A, puis en SSH depuis celle-ci vers la machine B, et éventuellement plus loin. Lorsque vous devez envoyer une commande d'évasion à un niveau spécifique dans cette chaîne, vous ajoutez un tilde supplémentaire par saut.
Le client SSH externe consomme le premier tilde et transmet le reste à la session interne. Ainsi :
- Pour quitter la première session interne :
Entrée→~~. - Pour quitter la deuxième session interne :
Entrée→~~~. - Chaque tilde enlève une couche de la chaîne.
Exemple : Session à trois sauts
ostechnix@local:~$ ssh bastion # hop 1
ostechnix@bastion:~$ ssh prod-server # hop 1 → 2
ostechnix@prod:~$ # hop 1 → 2 → 3
# To close prod-server only (innermost):
ostechnix@prod:~$ [Enter ~~.] → Connection to prod-server closed.
ostechnix@bastion:~$ # still on hop 2
# To close bastion:
ostechnix@bastion:~$ [Enter ~.] → Connection to bastion closed.
ostechnix@local:~$ # back homeCe schéma de multiplicateur tilde s'applique à chaque commande d'évasion. Ainsi, pour ouvrir une ligne de commande à l'intérieur de la session la plus interne, tapez ~~C. Pour lister les redirections de ports sur la session interne, tapez ~~#. La logique reste cohérente tout au long.
Voici un autre exemple :
ssh server1
ssh server2
ssh server3Maintenant, vous êtes assis trois sessions SSH en profondeur.
Si vous courez :
Enter
~.SSH quitte la session en cours seulement.
Vous retournez étape par étape :
server3 → server2 → server1 → local machineCependant, parfois vous voulez envoyer le caractère d'échappement à une session SSH interne. Dans ce cas, tapez :
~~Ceci envoie un ~ littéral au lieu de déclencher la séquence d'échappement.
4. Suspendre la session SSH
Vous pouvez suspendre la session SSH comme un processus Linux normal.
Enter
~^ZIci, ^Z est CTRL+Z.
Le processus SSH passe en arrière-plan.
Plus tard, ramenez-le avec :
fgCette astuce fonctionne bien si vous voulez exécuter rapidement une commande localement sans fermer votre session SSH.
5. Lister le transfert de port actif
Si vous utilisez souvent des tunnels SSH, cette commande aide.
Enter
~#SSH affichera toutes les connexions transférées actives.
Exemple de sortie :
The following connections are open:
#0 client-session (t4 [session] r0 i0/0 o0/0 e[write]/4 fd 4/5/6 sock -1 cc -1 io 0x01/0x01)Cela vous aide à confirmer quels tunnels sont actifs.
6. Modifier la verbosité de débogage SSH
Vous pouvez augmenter ou diminuer la journalisation SSH.
Enter
~VOu,
Enter
~vCette fonctionnalité aide lorsque vous dépannez des problèmes de connexion.
Fiche de référence des caractères d'échappement SSH
Voici toutes les commandes pratiques condensées en une seule liste. Mettez-la en favori ou collez-la dans votre application de notes.
- Afficher le menu :
Entrée→~? - Tuer une session gelée :
Entrée→~. - Ajouter le transfert de port en direct :
Entrée→~C→ tapez votre règle - Lister les transferts de ports actifs :
Entrée→~# - Suspendre en arrière-plan local :
Entrée→~^Z(reprendre avecfg) - Déboguer avec plus de journalisation :
Entrée→~v(ou~Vpour réduire) - Quitter la session imbriquée la plus interne :
Enter→~~. - Quitter la deuxième session imbriquée :
Entrée→~~~. - Envoyez un caractère tilde littéral :
Entrée→~~
Où cela se cachait-il ?
Ces séquences d'échappement sont entièrement documentées dans les pages de manuel officielles d'OpenSSH. Exécutez man ssh dans votre terminal et recherchez la section intitulée CARACTÈRES D'ÉCHAPPEMENT. Tout ce qui précède s'y trouve, rédigé dans un langage technique précis.
Alors pourquoi presque personne n'en a connaissance ? Parce que les pages de manuel sont longues, denses, et peu de développeurs les lisent jusqu'au bout. L'information a toujours été publique — elle n'a juste jamais reçu la visibilité qu'elle méritait.
La prochaine fois qu'un collègue se plaint de devoir fermer des fenêtres de terminal à cause d'une session SSH gelée, vous saurez exactement quoi lui dire. Et la fois suivante. Et chaque fois après cela.
Un conseil qui vaut la peine d'être retenu
Si vous ne vous souvenez que d'une seule commande, souvenez-vous de celle-ci :
Enter
~.Cette séquence simple peut terminer instantanément une session SSH gelée.
Cela fonctionne même lorsque le serveur distant cesse de répondre. Cela seul en fait une astuce précieuse pour quiconque travaille avec des serveurs Linux.
Idées reçues courantes sur les séquences d'échappement SSH
Voici les idées reçues les plus courantes sur le menu d'échappement SSH.
1. « Ceci est un nouveau hack que quelqu'un a récemment découvert »
Ce n'est ni nouveau ni caché. Les séquences d'échappement SSH sont dans la documentation d'OpenSSH depuis le lancement du projet en 1999.
Ils se trouvent dans la page de manuel sous CARACTÈRES D'ÉCHAPPEMENT. Il s'agit d'une fonctionnalité entièrement documentée et officielle — ce n'est pas une astuce, une exploitation ou une solution de contournement. La seule chose surprenante est la rareté avec laquelle on en parle.
2. « Ça ne fonctionne que sur Linux »
Faux sur toutes les suppositions relatives aux plateformes. Les séquences d'échappement se trouvent dans le client SSH, pas dans le système d'exploitation. Elles fonctionnent donc sur le Terminal macOS, le Terminal Windows exécutant OpenSSH, et WSL — tout environnement exécutant un client OpenSSH correct. Le système d'exploitation du serveur distant est complètement sans importance.
Si vous utilisez PuTTY, ces séquences d'échappement spécifiques ne sont pas prises en charge. PuTTY n'implémente pas le système d'échappement tilde d'OpenSSH, vous devrez donc passer à un client basé sur OpenSSH pour les utiliser.
3. "Fermer la fenêtre du terminal fait la même chose que ~."
Ce sont des actions très différentes. Fermer le terminal tue tout le processus de l'émulateur de terminal — ce qui peut orpheliner des processus en arrière-plan, casser des sessions multiplexées et laisser des transferts de port en suspens.
~. envoie un signal de terminaison propre via le protocole SSH, fermant correctement la connexion et libérant les ressources.
4. « Si le serveur est gelé, rien ne peut fonctionner »
C'est la plus grande idée reçue et celle qui mérite le plus d'être corrigée. Certains débutants pensent qu'une session figée signifie qu'ils sont impuissants. Mais ~. ne touche jamais le serveur. Il s'exécute localement, sur votre machine, et se contente de couper la connexion TCP. L'état du serveur est complètement sans rapport avec le fonctionnement de ~..
5. « Vous avez besoin des droits root ou de permissions spéciales pour l'utiliser »
Aucune autorisation requise. Ce sont des raccourcis clavier côté client disponibles pour tout utilisateur exécutant une session SSH. Aucun sudo, aucun changement de configuration, aucun accès administrateur requis — juste une connexion SSH active et la connaissance de l'existence du menu.
6. « ~ et Ctrl+C font le même travail »
Ctrl+C envoie un signal d'interruption au processus distant — ce qui nécessite que la connexion soit active et réactive pour fonctionner. Si la session est gelée, Ctrl+C ne fait rien. ~. contourne entièrement la connexion et fonctionne toujours, peu importe ce que fait le côté distant.
7. « Cela fonctionne dans chaque commande SSH que vous exécutez »
Ceci prend même les utilisateurs expérimentés au dépourvu. Les séquences d'échappement ne fonctionnent que lorsque votre session SSH a alloué un pseudo-terminal (PTY), ce qui se produit automatiquement dans les sessions interactives normales où vous tapez des commandes et obtenez une invite de shell. Cependant, elles échouent silencieusement dans les appels SSH non interactifs comme ssh user@host "some-command", car aucun PTY n'est demandé dans ces cas.
Ainsi, si vous exécutez une commande distante ponctuelle via SSH plutôt que d'ouvrir un shell complet, les séquences d'échappement ne répondront pas. Pour toute utilisation interactive quotidienne, vous ne rencontrerez jamais cette limitation.
Conclusion
Le menu d'échappement SSH est l'une de ces fonctionnalités que, une fois que vous connaissez, vous ne pouvez pas imaginer travailler sans. C'est une fonctionnalité intégrée utile qui fonctionne même lorsque rien d'autre ne fonctionne.
La prochaine fois que votre session SSH se fige : appuyez sur Entrée, tapez ~., et revenez à votre invite locale en moins d'une seconde. Pas de souris. Pas de nouveau terminal. Pas d'attente.
Une fois que vous connaissez le menu d'échappement SSH, vous gagnez plusieurs capacités utiles :
- Quitter instantanément les sessions bloquées
- Créer des tunnels sans se reconnecter
- Suspendre les processus SSH
- Inspecter les redirections de ports actives
Ces petites astuces permettent souvent de gagner du temps lors de véritables dépannages.
Si vous utilisez SSH quotidiennement, cette fonctionnalité mérite une place dans votre boîte à outils.
Lectures complémentaires :
Exécutez man ssh et recherchez ESCAPE CHARACTERS pour lire la documentation officielle. Le projet OpenSSH maintient également des documents sur openssh.com.



