Solución:
Sí, es posible, pero asegúrese de que:
- Para tener la última versión de tmux instalada de forma remota
- Tener la versión más reciente de iterm2 instalada localmente
Iniciar sesión a través de ssh [email protected] -t 'tmux -CC'
y voilà: esto debería abrir la ventana iTerm2 en su cuadro local conectado al cuadro remoto.
Esto es lo que funcionó para mí, con las versiones de lanzamiento estable a partir del 2015-12-16, que son iTerm 2.1.4 en OS X 10.11.2 y tmux 1.9 en Raspbian Linux:
-
Primer uso
.ssh/config
en su máquina local y.ssh/authorized_keys
en su máquina remota para configurar el inicio de sesión sin contraseña en el sistema remoto. Una vez que esté configurado correctamente, debería poder iniciar sesión simplemente haciendossh pi
(suponiendo quepi
es el nombre de host de su sistema remoto). -
Cree un nuevo perfil de iTerm2 que, en lugar de iniciar sesión en su shell local, solo llame
ssh pi
para iniciar sesión en la máquina remota. Para configurar esto, vaya a: Preferencias / Perfiles / + / Command.Command = “ssh pi” -
Abra una ventana de iTerm2 a la máquina remota a través de su nuevo perfil, haciendo: Perfiles / Pi.
-
En la ventana de inicio de sesión remoto de iTerm2, en la línea de comando, haga lo siguiente:
tmux -CC
. Después de esto, su ventana iTerm2 muestra el modo de comando tmux, tmux crea una nueva sesión e iTerm2 crea inmediatamente una nueva ventana iTerm2 para esa sesión tmux. Dentro de esa nueva ventana de iTerm2, la pestaña inicial de iTerm2 representa el único ventana tmux de esa sesión. Si hace CMD-T, esto creará una nueva pestaña iTerm2, que representa una nueva ventana tmux.
¿Cómo usas esto?
-
En este punto, puede hacer “Shell / tmux / Dashboard” para observar la comprensión de iTerm2 de las sesiones y ventanas de tmux existentes.
-
Si cierra la ventana iTerm2 que representa la sesión tmux, mata la sesión subyacente y todas sus ventanas tmux.
-
Si cierra la ventana iTerm2 que muestra el modo de comando tmux, entonces parece que simplemente mata la instancia del cliente tmux que estaba conectada a esa sesión, por lo que ambas ventanas iTerm2 desaparecen, pero la sesión tmux sigue viva y puede volver a conectarse a eso.
-
Si desea una separación más ordenada de tmux, simplemente haga
ESC
dentro de la ventana del modo de comando tmux. -
Si en lugar de crear una nueva sesión tmux, lo que quería originalmente era adjuntar a una sesión existente, entonces puede hacerlo con
tmux -CC attach
.
En teoría, creo que debería haber una forma de configurar iTerm2 o tmux para que cuando te conectes al sistema remoto te conectes automáticamente a cualquier sesión tmux existente, pero no pude hacer que eso funcionara modificando la línea de comando en el perfil iTerm2.
TLDR
ssh <hostname> -t 'tmux -CC new -A -s tmssh'
Explicación
Dentro de una sesión ssh existente (asumiendo que está usando iTerm2), simplemente puede ejecutar tmux -CC
y se abrirá una ventana nativa de iTerm2 con la integración de tmux. Esto significa que dispone de desplazamiento nativo, pantalla dividida y copiar y pegar.
tmux -CC
abre tmux en modo de control.
Puede combinar esto con el comando ssh para abrir inmediatamente la ventana nativa de tmux:
ssh [email protected] -t 'tmux -CC'
-t
fuerza la asignación de pseudo-tty (permite caracteres de control dentro de SSH)
La desventaja de este enfoque es que obtendrá una nueva sesión tmux cada vez, por lo que no podrá volver a conectarse para ver los procesos de larga ejecución (a menos que recuerde ejecutar tmux -CC attach
).
Podemos expandir un poco el comando para crear una sesión tmux con nombre, crear la sesión si no existe o volver a conectar si la sesión ya existe:
ssh <hostname> -t 'tmux -CC new -A -s tmssh'
new
crea una nueva sesión-A
marcasnew-session
comportarse comoattach-session
si el nombre de la sesión ya existe-s tmssh
crea una sesión llamadatmssh
Ahora tiene una ventana nativa de iTerm2 tmux, que puede cerrar en cualquier momento y volver a conectarse cuando sea necesario.
Función auxiliar
Finalmente, para hacer la vida más fácil, podemos poner todo esto en una función auxiliar que puede agregar a su bashrc
o zshrc
:
# tmux+ssh helper function with iterm integration
function tmssh () {
if [[ -z "$1" ]]; then
me="${FUNCNAME[0]}${funcstack[1]}"
echo "usage: $me [ssh-args] hostname"
return 1
fi
ssh "[email protected]" -t 'tmux -CC new -A -s tmssh'
}