53 votes

Attacher une session tmux à une machine distante

J'utilise tmux sur ma machine locale et j'ai généralement plusieurs sessions simultanées.

Ce que je fais habituellement, c'est que j'ai une session avec différents Windows pour travailler localement et d'autres sessions dans lesquelles je connecte plusieurs Windows à un hôte par session.

L'arborescence d'une session ou d'une fenêtre ressemblerait à ceci dans l'utilisation quotidienne que je fais de tmux :

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2: somehost
 |  \_ window1: ssh user@somehost
 |  \_ window2: ssh user@somehost
 |  \_ ...
 |
 + session 3: someotherhost
    \_ window1: ssh user@someotherhost
    \_ window2: ssh user@someotherhost
    \_ ...

Existe-t-il un moyen de faire de la session 2 et de la session 3 des sortes de sessions distantes se connectant à une session tmux créée sur un certain hôte et un autre hôte ?

L'arbre ci-dessus se présente comme suit :

(TMUX on my local machine)
 |
 +- session 1: local
 |  \_ window 1: local shell
 |  \_ window 2: local shell
 |  \_ ...
 |
 + session 2 linked to an existing session on somehost
 |  \_ window1: shell on somehost
 |  \_ window2: shell on somehost
 |  \_ ...
 |
 + session 3 linked to an existing session on someotherhost
    \_ window1: shell on someotherhost
    \_ window2: shell on someotherhost
    \_ ...

J'ai trouvé ce sujet mais je ne suis pas sûr que ce soit ce que je veux faire : Est-il possible de partager les sockets de tmux entre les hôtes ?

Je suppose que ce que je recherche m'obligerait à avoir la même configuration de tmux sur ma machine locale, sur un certain hôte et sur un autre hôte, mais cela ne poserait pas de problème.

26voto

m__ Points 407

Vous pouvez transmettre une commande à ssh lorsque vous vous connectez à un hôte distant. Inclure la commande -t avec l'option tmux attach-session pour se connecter à la session tmux distante :

ssh <remote host> -t tmux attach-session

Ce billet sur s'attacher à une session tmux via ssh l'explique plus en détail.

4voto

somay Points 41

Si votre principal problème est que vous devez taper ssh remotehost à chaque fois que vous ouvrez une nouvelle fenêtre, le default-command peut être une solution de contournement.

Il exécute automatiquement la commande que vous avez spécifiée lorsque vous ouvrez de nouvelles fenêtres dans les sessions que vous avez définies.

Un simple réglage en .tmux.conf :

bind-key C-r new-session ssh remotehost \; set-option default-command "ssh remotehost"

Cette clé de liaison Ctrl-r crée une nouvelle session dans laquelle chaque fenêtre nouvellement ouverte exécute d'abord ssh remotehost en votre nom.

Vous pouvez choisir les hôtes à connecter au moment de la création de la session avec les paramètres ci-dessous :

bind-key C-r command-prompt "new-session -s %1 ssh %1 \; set-option default-command \"ssh %1\""

Celui-ci vous demande l'hôte que vous voulez faire ssh à chaque création de session (et non à chaque création de fenêtre) et démarre la session dédiée à cet hôte.

Il faut peu de temps pour exécuter de nombreuses ssh si vous activez le multiplexage SSH dans votre configuration ssh. Les .ssh/config est présenté ci-dessous :

Host remotehost
    ControlMaster auto
    ControlPath ~/.ssh/mux-%r@%h:%p
    ControlPersist 10

Notez que ce paramètre tmux ne crée pas de sessions tmux dans les hôtes distants. Si la connexion ssh est perdue, les fenêtres tmux concernées ne reviendront jamais.

2voto

untore Points 141

Vous pourriez utiliser un outil comme socat pour tunneler le socket de domaine unix utilisé par tmux vers votre machine locale. Mais vous ne faites qu'échanger un tunnel (ssh) contre un autre (socat), ce n'est donc pas vraiment mieux, et ce n'est pas non plus très sûr.

1voto

outoftime Points 111

Si vous parlez de Shell à distance, cela signifie que vous pouvez y exécuter des commandes, en d'autres termes, que vous avez un accès direct. Dans ce cas, vous pouvez simplement utiliser ssh pour chaque fenêtre à distance.

Vous pouvez y dire quelque chose comme :

"Hé, mais il n'y a pas moyen d'avoir plusieurs Windows pour chaque serveur distant !".

et c'est vrai, en raison des restrictions ssh. Mais vous pouvez démarrer une session tmux sur chacun de vos serveurs distants. NOTE : Dans ce cas, vous devez réaffecter la valeur par défaut de l'option Ctrl+b sur la machine locale pour éviter les collisions.

Je vous recommande également d'utiliser tmuxinator Il s'agit d'un outil très utile si vous recréez votre session tmux au moins une fois par jour.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X