web-dev-qa-db-fra.com

Joindre une session tmux à une machine distante

J'utilise tmux sur ma machine locale et 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 session/arborescence de fenêtres ressemblerait à ceci dans l’utilisation quotidienne 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
    \_ ...

Est-il possible de faire de session 2 & session 3 une sorte de session à distance connectée à une session tmux créée sur somehost & someotherhost?

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 de sockets tmux entre hôtes est-il possible?

Je suppose que ce que je recherche exigerait que je dispose de la même configuration tmux sur ma machine locale, somehost & someotherhost, mais cela ne poserait pas de problème.

29
lilorox

Vous pouvez transmettre une commande à ssh lors de la connexion à un hôte distant. Incluez l'option -t avec tmux attach-session pour 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.

17
m__

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

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

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-r crée une nouvelle session dans laquelle chaque nouvelle fenêtre ouverte exécute d'abord ssh remotehost pour votre compte.

Vous pouvez choisir des 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 (pas à 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 plusieurs ssh si vous activez le multiplexage SSH dans votre configuration ssh. L'exemple .ssh/config 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 sur des hôtes distants. Si la connexion ssh est perdue, les fenêtres tmux concernées ne reviendront jamais.

1
somay

Vous pouvez utiliser un outil tel que socat pour canaliser le socket de domaine Unix utilisé par tmux sur votre machine locale. Mais vous échangez simplement un tunnel (ssh) contre un autre (socat), de sorte que ce n’est pas vraiment meilleur, et aussi peu sûr.

1
untore

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 connexion ssh pour chaque fenêtre distante.

Vous pouvez 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, en raison des restrictions SSH. Mais, vous pouvez démarrer la session tmux sur chacun ou sur votre serveur distant. REMARQUE: dans ce cas, vous devez rapprocher le code par défaut Ctrl+b sur l'ordinateur local pour éviter les collisions.

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

0
outoftime