Aller au contenu principal

Maîtrisez votre commande ssh et choisissez l'host dans une liste

Construisez un sélecteur d'hosts SSH interactif et filtrable avec FZF. Apprenez à modulariser vos configurations SSH, à ajouter une documentation riche et à déclencher des actions personnalisées avancées via une interface terminal rapide.

· 8 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Journal des modifications

Dernière
sshf now installs as its own file, ~/.zsh/fns or ~/.bash/fns, with a zsh/bash tab and its loader loop.
added a Docker-first demo to try before installing

Maîtrisez votre commande ssh et choisissez l'host dans une liste

⚡
TL;DR
Gérer des dizaines de connexions serveur dans un fichier ~/.ssh/config monolithique devient vite ingérable et repose trop sur la mémoire. Cet article montre une approche plus propre : découper votre configuration en fichiers par projet dans un dossier ~/.ssh/conf.d/, ce qui permet d'attacher une documentation riche et stylée juste au-dessus de vos définitions d'hosts. Pour lier le tout, vous allez écrire une fonction shell personnalisée (sshf) propulsée par FZF. Vous obtenez une interface terminal (TUI) rapide et filtrable pour trouver instantanément un host par nom, projet ou métadonnée. On va même plus loin avec des raccourcis clavier personnalisés, qui déclenchent des actions contextuelles avancées — pinguer des serveurs, modifier des configurations ou générer des inventaires système — directement depuis le menu de recherche.

Sur ma machine, j'ai accumulé de plus en plus d'hosts dans mon fichier ~/.ssh/config. Je peux taper ssh server4 (voir zsh-ssh-config-suggestions) pour sauter sur ce serveur, mais je dois encore me souvenir de la liste des serveurs disponibles. C'est gérable avec quelques-uns, mais j'en ai actuellement une cinquantaine, et compter uniquement sur sa mémoire n'est plus réaliste.

Il serait bien plus pratique d'afficher la liste complète des hosts dans une TUI (Terminal User Interface), de sélectionner celui qu'on veut et d'appuyer simplement sur Enter. En plus, ce serait très utile d'avoir des informations contextuelles : l'URL hébergée sur ce serveur, la présence d'une base de données, la version de PHP, etc.

Enfin, créer un fichier .conf par projet éviterait de maintenir un énorme fichier de configuration monolithique contenant les 50 serveurs. Voyons comment mettre tout cela en place.

Cet article s'appuie sur Introduction à fzf - Fuzzy Finder et sur les alias créés dans Comment se connecter à votre serveur d'hébergement en SSH. Il applique à ~/.ssh/config la même philosophie « un fichier par sujet » que Au-delà du monolithe - Organiser son workflow ZSH comme un pro.

Avant d'entrer dans les détails techniques, voici un aperçu du résultat final :

Notre TUI sshf

À gauche, une zone de recherche (je peux taper amazing pour filtrer sur ce motif) au-dessus d'une liste d'hosts. À droite, les informations contextuelles sur l'host sélectionné.

Une fois l'host choisi, j'appuie sur Enter pour ouvrir une session SSH dessus — sans devoir saisir mes identifiants à la main.

C'est parti...

Le voir en action avec Docker​

Avant de toucher à votre propre ~/.ssh/config, essayez toute la TUI dans un container jetable — les fichiers amazing.conf/legacy.conf exacts et la fonction sshf décrite plus bas y sont déjà en place.

Pourquoi Docker d'abord ?

Le Dockerfile ci-dessous installe fzf, perl et openssh-client, écrit les fichiers de configuration SSH exacts montrés plus bas, et ajoute la fonction sshf exacte à ~/.bashrc. Rien ne change sur votre propre machine et — puisque 1.2.3.4 et consorts sont les mêmes IP d'exemple utilisées tout au long de l'article — appuyer sur Enter sur un host ne vous connectera nulle part.

Buildez et lancez :

>user@machine: ~/sshf-demo

$ docker build -t sshf-demo . [+] Building 26.4s (8/8) FINISHED ✔ exporting to image

$ docker run --rm -it sshf-demo 🐳 root ~ # sshf

La même TUI que sur la capture en haut de l'article s'ouvre, avec les quatre hosts des deux fichiers conf.d et leurs doc-blocks. Tapez prod ou php pour filtrer, exactement comme dans la section « Utiliser les options de filtrage » plus bas — aucun serveur réel n'est jamais contacté.

Installer FZF​

Consultez mon article Fuzzy Finder si vous avez besoin de plus de détails. Sinon, lancez simplement la commande ci-dessous et terminez l'installation en répondant « Yes » à toutes les questions, en suivant les instructions affichées dans votre terminal.

>user@machine: ~/yourproject

Ce n'est pas lié à SSH, mais vous pouvez désormais appuyer sur CTRL+R pour accéder bien plus facilement à l'historique de votre console. Ce n'est qu'une des très bonnes fonctionnalités de FZF.

Configuration SSH​

L'objectif ici est d'organiser votre configuration plus intelligemment. Créons un dossier ~/.ssh/conf.d qui contiendra vos fichiers de configuration.

>user@machine: ~/yourproject

Par exemple, créez un fichier ~/.ssh/conf.d/amazing.conf avec le contenu suivant :

Créez ensuite un second fichier nommé ~/.ssh/conf.d/legacy.conf avec ce contenu :

Mettez maintenant à jour votre fichier principal ~/.ssh/config pour inclure ces nouveaux fichiers :

Include conf.d/amazing.conf
Include conf.d/legacy.conf

Cette approche vous permet simplement de regrouper les hosts par projet, ce qui les rend plus faciles à gérer.

Regardons le fichier amazing.conf​

Nous avons défini trois entrées Host : MyAmazingApp_PROD, MyAmazingApp_TEST et YourAmazingApp.

Remarquez que nous avons ajouté des commentaires juste avant les deux premières lignes Host (l'emplacement est crucial).

Ce « doc-block » est du texte brut, vous pouvez donc y écrire ce que vous voulez. Pour plus de confort, il prend en charge des marqueurs comme blue, green, red, yellow, bg-red, bg-yellow et bold.

Quand l'host MyAmazingApp_PROD est sélectionné dans la TUI, son doc-block associé s'affiche automatiquement.

Ajouter la fonction sshf​

sshf a son propre fichier, dans un dossier que votre shell charge au démarrage (l'organisation expliquée dans Au-delà du monolithe) : votre fichier rc reste court, et désinstaller l'outil revient à supprimer un fichier.

Le code est identique pour zsh et bash ; seuls le dossier et le loader changent.

1. Créez le fichier dans ~/.zsh/fns/ :

📦 Mise en place du projet : ~/.zsh/fns
Aide

Besoin d'aide ? Cliquez sur le bouton « Aide » ci-dessus pour les instructions de mise en place.

2. Chargez le dossier depuis ~/.zshrc. Déjà fait si vous avez suivi un de mes articles « Ollama au quotidien ». Sinon, ajoutez à la fin de ~/.zshrc :

~/.zshrc
for fn_file in ~/.zsh/fns/*.zsh; do
source "$fn_file"
done

3. Ouvrez un nouveau terminal (ou lancez exec zsh).

Vérifiez que le shell connaît la fonction : type sshf doit répondre sshf is a shell function.

Retournez dans votre terminal, tapez sshf et appuyez sur Enter. La magie opère.

Vous verrez la liste complète des hosts définis. En tapant quelques lettres, vous filtrez instantanément. Par exemple, tapez prod pour n'afficher que les serveurs de production.

Facile, non ?

Utiliser les options de filtrage​

Vous pouvez filtrer sur n'importe quel motif. Par exemple, si vous tapez php :

Filtrage sur les serveurs PHP

FZF cherche dans toutes les données disponibles, pas seulement dans les noms d'hosts.

Mon cas d'usage réel​

Au boulot, je suis allé bien plus loin que le simple affichage d'une liste d'hosts. FZF prend en charge les raccourcis clavier personnalisés : vous pouvez associer des actions à d'autres touches que Enter. Vous pouvez définir des actions déclenchées par CTRL+A, CTRL+I, ou même une simple lettre comme E.

C'est là que ça devient vraiment puissant !

  • Ctrl+AJ'ai mis en place un second écran qui affiche une liste d'actions à exécuter sur l'host sélectionné.
  • Ctrl+IJe lance un script de gestion d'inventaire qui scanne tous mes hosts (ou seulement ceux filtrés) et génère une page web avec un inventaire à jour des logiciels installés (versions de PHP, Python, PostgreSQL...).
  • EVous pourriez, par exemple, ouvrir un éditeur pour modifier directement le fichier de configuration de l'host sélectionné.

Utilisation des raccourcis clavier

Votre imagination est la seule limite !


🦋 Rejoignez la conversation sur BlueskyUn compte Bluesky gratuit est nécessaire pour aimer, repartager ou commenter. Ce bloc interroge l'API publique de Bluesky directement depuis votre navigateur (sans cookie, sans connexion) — votre adresse IP parvient donc aux serveurs de Bluesky dès que cette section se charge.

Chargement des commentaires…

Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?