Attacher une session tmux à une machine distante

31

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

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

Une arborescence de session / 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 une sorte de sessions distantes se connectant à une session tmux créée sur un hôte ou un autre?

L'arbre ci-dessus ressemblerait à ceci:

(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 c'est ce que je veux faire: le partage d'un socket tmux entre hôtes est-il possible?

Je suppose que ce que je cherche nécessiterait que j'aie la même configuration tmux sur ma machine locale, un hôte ou un autre, mais ce ne serait pas un problème.

lilorox
la source
Avez-vous trouvé une solution pour cela? Je pense qu'avoir une session à distance que vous pouvez gérer comme si elle était locale est une excellente idée, mais il semble que la réponse la plus votée ne soit pas vraiment votre question
mbigras

Réponses:

18

Vous pouvez passer une commande à ssh lors de la connexion à un hôte distant. Incluez l' -toption avec tmux attach-sessionpour vous connecter à la session tmux distante:

ssh <remote host> -t tmux attach-session

Ce post sur l' attachement à une session tmux via ssh l' explique plus en détail.

m__
la source
18
Cela ne vous donne-t-il pas simplement une session imbriquée? Je crois que ce que l'OP essaie de faire, c'est que la session distante apparaisse à côté de leur session locale afin qu'ils puissent naviguer dans la fenêtre de choix / l'arbre de choix d'un tmux.
stsquad
S'il y a plus d'une session attachée à l'hôte distant, vous pouvez utiliser: ssh <hôte distant> -t tmux a -t <nom-session>
user1757247
J'ai fait quelques modifications pour résoudre un problème rencontré et une étape par étape. J'espère que l'examen par les pairs se terminera bientôt. Cela a fonctionné ssh <remote host> -t /path/to/tmux a -t <my-session-name>, avait besoin d'un supplément-t
Merlin
J'ai la même question que le PO. Cela ne répond pas à ma question. Il crée une session tmux imbriquée où je dois double échapper toutes les commandes tmux que je veux envoyer à cette session. Je veux quelque chose où la session distante apparaît dans ma liste de sessions comme une session locale.
Omnifarious
2

Si votre problème principal est que vous devez taper ssh remotehostchaque fois que vous ouvrez une nouvelle fenêtre, l' default-commandoption de session peut être une solution de contournement.

Il exécute automatiquement la commande que vous spécifiez lorsque vous ouvrez de nouvelles fenêtres dans les sessions auxquelles vous le définissez.

Un réglage simple dans .tmux.conf:

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

Cette liaison de clé Ctrl-rcrée une nouvelle session où chaque fenêtre nouvellement ouverte s'exécute d'abord ssh remotehosten 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 souhaitez faire sshà chaque création de session (pas à chaque création de fenêtre) et démarre la session dédiée à cet hôte.

Il faut peu de temps pour en exécuter plusieurs sshsi vous activez le multiplexage SSH dans votre configuration ssh. L' .ssh/configexemple est 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 des hôtes distants. Si la connexion ssh est perdue, les fenêtres tmux affectées ne reviennent jamais.

donc peut
la source
1

Vous pouvez utiliser un outil comme socat pour tunneler le socket de domaine unix utilisé par tmux sur votre machine locale. Mais vous êtes vraiment en train d'échanger un tunnel (ssh) pour un autre (socat) donc ce n'est pas vraiment mieux, et aussi peu sûr.

démoraliser
la source
Peut-être un tunnel à socattravers ssh? 🙂
Omnifarious
à ce stade tmatepourrait être le meilleur outil pour la gestion à distance de tmux
jusqu'à
0

Si vous parlez de shell distant, vous voulez dire que vous pouvez y exécuter des commandes, en d'autres termes, vous avez un accès direct. Dans ce cas, vous pouvez simplement utiliser la sshconnexion pour chaque fenêtre distante.

Vous pouvez y dire quelque chose comme:

"Hé, mais il n'y a aucun moyen d'avoir plusieurs fenêtres pour chaque serveur distant!"

et c'est vrai, à cause des restrictions ssh. Mais, vous pouvez démarrer la session tmux sur chacun ou votre serveur distant. REMARQUE: dans ce cas, vous devez relier par défaut Ctrl+bsur la machine locale pour éviter les collisions.

Je vous recommande également d'utiliser tmuxinator, c'est un outil très utile si vous rectifiez votre session tmux au moins tous les jours.

hors du temps
la source