Adjunte una sesión tmux a una máquina remota

31

Estoy usando tmux en mi máquina local y generalmente tengo varias sesiones simultáneamente.

Lo que generalmente hago es tener una sesión con diferentes ventanas para trabajar localmente y las otras sesiones en las que conecto varias ventanas a un host por sesión.

Un árbol de sesión / ventana se vería así en el uso diario que hago 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
    \_ ...

¿Hay alguna manera de hacer que la sesión 2 y la sesión 3 sean algún tipo de sesión remota que se conecte a una sesión tmux creada en somehost y someotherhost?

El árbol de arriba se vería así:

(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
    \_ ...

Encontré este tema pero no estoy seguro de que esto sea lo que quiero hacer: ¿es posible compartir un socket tmux entre hosts?

Supongo que lo que estoy buscando requeriría que tenga la misma configuración tmux en mi máquina local, algún host y otro host, pero eso no sería un problema.

lilorox
fuente
¿Has encontrado una solución para esto? Creo que tener una sesión remota que puedes administrar como si fuera local es una gran idea, pero parece que la respuesta más votada no es realmente tu pregunta
mbigras

Respuestas:

18

Puede pasar un comando a ssh cuando se conecta a un host remoto. Incluya la -topción con tmux attach-sessionpara conectarse a la sesión remota de tmux:

ssh <remote host> -t tmux attach-session

Esta publicación sobre cómo adjuntar una sesión tmux a través de ssh lo explica con más detalle.

metro__
fuente
18
¿No te da esto una sesión anidada? Creo que lo que el OP está tratando de hacer es que la sesión remota aparezca junto a su sesión local para que puedan navegar dentro de la ventana de elección / árbol de selección de un tmux.
stsquad
Si hay más de una sesión adjunta en el host remoto, puede usar: ssh <host remoto> -t tmux a -t <nombre-sesión>
usuario1757247
Hice algunas ediciones para solucionar un problema que encontré y paso a paso. Esperemos que la revisión por pares termine pronto. Esto funcionó ssh <remote host> -t /path/to/tmux a -t <my-session-name>, necesitaba un extra-t
Merlin
Tengo la misma pregunta que el OP. Esto no responde mi pregunta. Crea una sesión tmux anidada donde tengo que escapar dos veces de todos los comandos tmux que quiero enviar a esa sesión. Quiero algo donde la sesión remota aparezca en mi lista de sesiones como lo haría una sesión local.
Omnifarioso
2

Si su problema principal es que tiene que escribir ssh remotehostcada vez que abre una nueva ventana, la default-commandopción de sesión puede ser una solución alternativa.

Ejecuta automáticamente el comando que especifique cuando abra nuevas ventanas en las sesiones en las que lo configuró.

Una configuración simple en .tmux.conf:

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

Este enlace de teclas Ctrl-rcrea una nueva sesión donde cada ventana recién abierta se ejecuta ssh remotehosten primer lugar en su nombre.

Puede elegir hosts para conectarse en el momento de creación de la sesión con la siguiente configuración:

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

Éste le pregunta el host que desea hacer sshen cada creación de sesión (no en cada creación de ventana) e inicia la sesión dedicada a ese host.

Se necesita poco tiempo para ejecutar muchos sshsi habilita la multiplexación SSH en su configuración ssh. El .ssh/configejemplo está abajo:

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

Tenga en cuenta que esta configuración tmux no crea sesiones tmux en hosts remotos. Si se pierde la conexión ssh, las ventanas tmux afectadas nunca regresan.

entonces se puede
fuente
1

Puede usar una herramienta como socat para hacer un túnel en el socket de dominio de Unix que tmux usa a su máquina local. Pero en realidad solo está cambiando un túnel (ssh) por otro (socat), por lo que no es realmente mejor y también inseguro.

deshacer
fuente
Tal vez un túnel socata través ssh? 🙂
Omnifarioso
en este punto, tmatepodría ser la mejor herramienta para el manejo remoto de tmux
desinstalar
0

Si habla de shell remoto, quiere decir que puede ejecutar comandos allí, en otras palabras, tiene acceso directo. En este caso, simplemente puede usar la sshconexión para cada ventana remota.

Puedes decir algo como:

"¡Oye, pero no hay forma de tener múltiples ventanas para cada servidor remoto!"

y es cierto, debido a restricciones ssh. Pero, puede iniciar la sesión tmux en cada uno o en su servidor remoto. NOTA: en este caso, debe volver a vincular el valor predeterminado Ctrl+ben la máquina local para evitar colisiones.

También le recomiendo que use tmuxinator, es una herramienta muy útil si rectifica su sesión de tmux al menos todos los días.

fuera de tiempo
fuente