Sessions tmux multi-hôtes (tmuxp + tmux-sessionx)

Sessions tmux multi-hôtes (tmuxp + tmux-sessionx)

Après avoir figé une session réutilisable dans l’article tmuxp précédent, la friction suivante vient souvent davantage du contrôle de sessions que du layout des panes.

Dans un contexte multi-hôte, du temps se perd souvent sur deux points: basculer vers la bonne session, puis valider le contexte après chaque changement.

C’est là que tmux-sessionx peut aider, comme surface de contrôle des sessions dans tmux.

1) Problème: le contrôle de sessions et la validation de contexte deviennent un goulot d’étranglement

Quand le nombre d’hôtes augmente, le cycle manuel (next-session, previous-session) peut devenir peu lisible.

Un coût récurrent est la vérification de contexte: “Quel hôte est ouvert ici ?” et “Est-ce la bonne session ?”

Un objectif pragmatique est une sélection plus rapide avec preview, puis une validation plus rapide après bascule.

2) Carte des capacités tmux-sessionx

Pour ce workflow, certains contrôles utiles dans le popup sont:

  • Recherche fuzzy + preview avant bascule.
  • Enter pour changer de session, ou saisie d’un nouveau nom + Enter pour créer une session.
  • Ctrl-r pour renommer et Alt+Backspace pour supprimer une session en place.
  • Ctrl-w en window mode et Ctrl-t en tree mode pour d’autres vues de navigation.
  • ? pour basculer le preview, puis Ctrl-u / Ctrl-d pour faire défiler la sortie.

tmux-sessionx: keymap complet et options

Toutes les possibilités sont dans le projet officiel: omerxx/tmux-sessionx. Pour le comportement complet et la personnalisation, consultez les sections key bindings et configuration du README.

Popup tmux-sessionx montrant recherche fuzzy et changement de session piloté par preview

3) Modèle pratique: base, par hôte et sensors

Une organisation simple en trois sessions peut bien fonctionner:

  • base pour les fenêtres de pilotage partagées: main, tunnel, framework, editor, c2_server, dns, proxy.
  • Une session par hôte avec la même forme: main, files, c2_client, revshell, brute_spray.
  • sensors pour la visibilité centralisée et les transferts: net, monitors, transfer.

base, host et sensors sont des labels d’exemple. Gardez des noms cohérents avec votre workflow.

Optionnel: dédier un deuxième écran à sensors

Si vous avez un deuxième écran, le fait de garder la session sensors visible dessus peut réduire les changements de contexte quand vous passez entre sessions par hôte. En écran unique, gardez sensors épinglée et revenez-y via tmux-sessionx.

tmux-sessionx devient plus utile quand la liste de sessions reflète cette séparation par rôle plutôt qu’un empilement de shells. Dans la capture ci-dessous, sensors est sélectionnée, host reste juste à côté, et le preview reflète la structure des panes définie dans le YAML.

Popup tmux-sessionx avec liste de sessions orientée rôles et preview sensors

Fichiers YAML utilisés pour ce modèle:

4) Pourquoi cela fonctionne bien avec tmux-sessionx

La liste de sessions reste compacte: une session de contrôle, une session sensors, et des sessions par hôte nommées node_IP.

tmuxp garde une forme stable pour les sessions hôte, et tmux-sessionx exploite cette forme pour la navigation. Le preview sert alors de validation avant changement, au lieu d’un signal bruité.

Le window mode devient plus lisible quand des rôles répétés (main, files, revshell, brute_spray) restent cohérents entre hôtes.

5) Nommage multi-hôte + frontières

Un pattern utile est node_IP.

Terminal zsh
$ tmux new-session -As node01_198_51_100_5

Exemples possibles: node02_198_51_100_23, node03_198_51_100_42.

Ce pattern peut rendre les résultats fuzzy plus déterministes et distinguer des hôtes proches via le suffixe IP.

Une frontière pratique est une session par hôte (ou groupe d’hôtes) quand le scope diverge. Gardez notes, shells, scans et monitors dans cette frontière.

6) Tips: préfixes int_/ext_

Si ce découpage de scope est utile, préfixez le même pattern:

  • int_Name_IP pour le contexte interne/post-foothold.
  • ext_Name_IP pour le contexte externe/internet-facing.