URL: https://linuxfr.org/users/benoar/journaux/utiliser-tmux-aussi-bien-en-local-qu-en-distant Title: Utiliser tmux aussi bien en local qu'en distant Authors: benoar Date: 2012年07月06日T16:25:10+02:00 License: CC By-SA Tags: ssh et tmux Score: 19 Salutations journal, J'ai hésité à mettre ce journal en astuce, mais je n'aime pas trop les entrées du forum, alors je post ici. En plus, le titre n'est sûrement pas très clair, alors je vais expliciter. J'utilise [tmux](http://tmux.sourceforge.net/) depuis quelques temps, et je le conseille vraiment à tout le monde : autant je n'ai jamais supporté screen plus de 2 minutes, autant là c'est devenu mon shell par défaut. Il a remplacer les tabs de gnome-terminal, maintenant j'ai juste un terminal simple et tmux dedans. J'avais un problème cependant, c'est quand je suis connecté en ssh à des machines distantes : soit elles n'ont pas tmux, et donc je dois lancer plusieurs ssh, soit elles ont tmux, mais alors ça ne s'imbrique pas très bien (il faut jouer du send-prefix, ça n'est pas pratique). Tout ça en faisant gaffe que mes sessions [restent up](https://linuxfr.org/users/benoar/journaux/le-tcp-keepalive-m-a-tue) ! Bref, j'ai cherché une solution à ça, et j'ai découvert quelques options bien sympas de ssh, comme le partage de connexion ssh pour différentes sessions. Cette option (voir ControlMaster et ControlPath, cf man ssh_config(5)) permet de lancer plusieurs shells parallèles sans avoir à se relogger. Cool ! Il me « suffit » donc de brancher ça à tmux pour que ça soit pratique. J'ai donc écrit le script suivant, qui permet de chopper la commande ssh actuellement utilisée, et d'ouvrir un nouveau pane/une nouvelle fenêtre avec : #!/bin/sh # From tmux, split the current pane and start a second ssh session if a # first was running. # To avoid having to login again, use the ControlMaster and ControlPath # options of ssh_config(5). # get the tty of the active pane CTTY=`tmux list-panes -F '#{pane_active} #{pane_tty}' \ | awk '/^1/ { print 2ドル }'` # look for processes attached to this tty, checking for the controlling # one, if it's named "ssh"; print the command as it was launched (same # arguments) COMMAND=`ps --no-headers -o pid,tpgid,args -t $CTTY \ | awk '1ドル == 2ドル && 3ドル ~ /^ssh\>/ { 1ドル=2ドル="" ; print }'` # no matching process was found if [ -z "$COMMAND" ]; then exit 1 fi case 1ドル in h) tmux split-window -h "exec $COMMAND" ;; v) tmux split-window -v "exec $COMMAND" ;; *) tmux new-window "exec $COMMAND" ;; esac (je le mets sous GPLv3)(oui, j'aime bien awk, ça me vient d'OpenWrt, qui est une référence à ce niveau pour moi) Passez-lui l'argument que vous voulez pour ouvrir au choix un pane ou une fenêtre, et bindez ça sur une touche ; perso, j'utilise C-s pour splitter normalement, et C-q pour splitter une session ssh (je splitte majoritairement verticalement). Comme ça en plus ça m'empêche de faire le vrai \^s ou \^q par inadvertance, qui sont le contrôle de flux du terminal, chose que je n'utilise jamais et qui est plus chiante qu'autre chose. J'ai aussi C-t pour une nouvelle fenêtre : sur un bépo, les trois sont sous la main droite les uns à côté des autres. Dans le fichier de conf .tmux.conf, ça donne : bind-key -n C-q run-shell "~/bin/split-ssh.sh v" Et pour le ssh_config : Host * ControlMaster auto ControlPath /home/mon_login/.ssh/%r@%h:%p Comme ça maintenant, je peux splitter facilement soit en local, soit en distant. Génial. En bonus, une autre fonctionnalité sympa de ssh, c'est le forwarding des autorisations : comme ça, on n'a pas besoin de mettre sa clé partout. Attention, comme indiqué dans le man, c'est à faire avec discernement, car ça peut être utilisé par l'admin de la machine sur laquelle on est connecté pour usurper votre identité. Donc à ne faire que sur des machines de confiance : Host machine-de-confiance ForwardAgent yes Je l'utilise pour un truc très pratique : faire des montages sshfs en « retour » sur ma machine, afin de partager des fichiers avec cette machine distante (quand des allers-retours à coup de scp sont trop chiants). Il faut ajouter sa clé (publique) dans le authorized_keys de sa propre machine, et comme ça, quand on se logge en ssh sur la machine-de-confiance, on peut faire un : sshfs ma-machine:quelque-part ici Tout ça sans avoir à générer de clés sur la machine distante, clés qui seront oubliées quelques part, ou perdues, en bordel ; bref, ça simplifie la gestion de clé. Voilà, j'espère que ces astuces vous seront utiles. Et n'oubliez pas, il n'est jamais trop tard pour se mettre à connaître et/ou utiliser certains outils qu'on utilise depuis des lustres, ou dont on entend parler depuis un bout de temps : pour moi, un peux plus de 10 ans pour un multiplexeur de terminal, et pareil pour le ssh_config...