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.
Respuestas:
Puede pasar un comando a ssh cuando se conecta a un host remoto. Incluya la
-t
opción contmux attach-session
para conectarse a la sesión remota de tmux:Esta publicación sobre cómo adjuntar una sesión tmux a través de ssh lo explica con más detalle.
fuente
ssh <remote host> -t /path/to/tmux a -t <my-session-name>
, necesitaba un extra-t
Si su problema principal es que tiene que escribir
ssh remotehost
cada vez que abre una nueva ventana, ladefault-command
opció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-r
crea una nueva sesión donde cada ventana recién abierta se ejecutassh remotehost
en 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
ssh
en 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
ssh
si habilita la multiplexación SSH en su configuración ssh. El.ssh/config
ejemplo está abajo: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.
fuente
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.
fuente
socat
a travésssh
? 🙂tmate
podría ser la mejor herramienta para el manejo remoto de tmuxSi habla de shell remoto, quiere decir que puede ejecutar comandos allí, en otras palabras, tiene acceso directo. En este caso, simplemente puede usar la
ssh
conexió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+b
en 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.fuente