Faire du Cluster SSH avec tmux et tmuxinator
- Unix
Je suis devenu un huge fan de tmux qui permet de faire énormément de chose dans son terminal. J’en ai déjà parlé il y a quelques temps sur la Sheevaboite en vous présentant ma configuration (qui a bien changé depuis).
Aujourd’hui, je vais vous présenter une fonctionnalité que je viens de découvrir et que je regrette de ne découvrir que maintenant…
Connexions multiples en SSH ?
Ne vous est-il jamais arrivé de devoir accéder à plusieurs serveurs en même temps pour supprimer un fichier, monitorer des logs ou autre réaliser une action qui nécessitait de taper plusieurs fois les mêmes commandes dans différents terminaux ?
Les plus malins d’entre vous connaissent déjà ClusterSSH (ou CSSH pour les intimes) ou Fabric qui permet de justement se connecter à plusieurs serveurs et d’exécuter des commandes en ne les saisissant qu’une seule fois dans une petite fenêtre modale.
Si jamais vous utilisez tmux, vous allez pouvoir désinstaller ClusterSSH et si vous n’utilisez pas tmux voici encore une autre bonne raison de le faire.
Tmuxinator pour gérer les sessions
Avant de parler de tmux, voici Tmuxinator est un utilitaire développé en ruby qui permet de facilement gérer des configurations de sessions tmux. C’est tmuxinator qui devenir très utile pour démarrer une session tmux avec des configurations précises, par exemple ouvrir un pane avec une session SSH pour chaque serveurs.
Comme c’est développé en ruby, l’installation est triviale :
$> gem install tmuxinator
Une fois l’installation terminé, il faut configurer un peu son environnement pour y intégrer tmuxinator
. Vérifier que les variables $EDITOR
et $SHELL
existent puis ajouter la ligne suivante dans votre environnement (dans votre fichier bashrc
ou .zshrc
) afin qu’elle soit exécutée au démarrage de votre shell :
# Si jamais vous n'avez pas défini $EDITOR et $SHELL, à adapter bien sur
export SHELL=/bin/zsh
export EDITOR=vim
[[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && source $HOME/.tmuxinator/scripts/tmuxinator
Une fois la configuration terminée, on peux créer une configuration que l’on va appeler serveur :
$> tmuxinator open serveur
Si la configuration est ok, vous devriez avoir l’appli vim ouverte avec un fichier pré-configuré, mais nous allons le modifier pour l’exemple avec la configuration suivante. Nous allons ouvrir une session avec une seule fenêtre et 4 “panes” :
# ~/.tmuxinator/serveur.yml
# you can make as many tabs as you wish...
project_name: serveur_truc
project_root: ~/
tabs:
- serveurs:
layout: tiled
panes:
- ssh serveur01
- ssh serveur02
- ssh serveur03
- ssh serveur04
Sauvez et quittez et vous pouvez maintenant ouvrir une session tmux nommé “serveur” avec la commande suivante :
$> tmuxinator start serveur
Et voilà !
Faire du CLusterSSH dans tmux
La configuration de tmuxinator est terminée, maintenant place à un peu de configuration de tmux. Tmux dispose d’un mode de synchronisation de la saisie qui permet de saisir une fois une commande et la voir s’afficher dans tous les panes. Voici la commande qui permet d’activer ce mode :
set-window-option synchronize-panes on
Ce qu’il faut faire, c’est mapper ce mode avec un raccourci et ca me semble pas mal de l’activer ce mode avec la touche s
. Pour faire cela il faut ajouter les lignes suivantes dans votre fichier tmux.conf
:
unbind s
bind s set -g synchronize-panes
Dorénavant, lorsque vous voudrez activer ce mode, il vous suffira de faire le raccourci CTR+x s
pour voir vos commandes s’afficher dans tous les panes ouverts. Une fois que vous aurez terminé, il faudra bien entendu désactiver ce mode.
Conclusion
Ce petit tutorial vous a montré comment facilement mettre en place un clone de CSSH. Alors, vous n’avez pas forcément besoin de tmuxinator pour profiter du “mode CSSH” de tmux, mais c’est un confort agréable pour ouvrir tous les panes en une seule commande.
J’espère que cela vous aura donné envie de tester un peu tmuxr