En este artículo demostraremos cómo Establecer el menú de selección de sesión tmux Se inició al iniciar sesión en un sistema Linux remoto a través de SSH. Este menú enumerará las sesiones tmux existentes y brindará la opción de crear una nueva sesión.
Tabla de Contenidos
introducir
multiplexor, un multiplexor de terminal que permite a los usuarios administrar múltiples sesiones de terminal dentro de una sola ventana. Esto es muy conveniente, especialmente cuando se trabaja en sistemas remotos a través de SSH.
Un enfoque común es El inicio de sesión SSH se adjuntará automáticamente a la sesión tmux. Pero, ¿qué sucede si desea tener más control sobre esto, como poder seleccionar dentro de una sesión existente o crear una nueva? Esto se puede lograr con la ayuda de scripts Bash.
En los siguientes pasos, le mostraré cómo mejorar el inicio de sesión SSH remoto en Linux utilizando el script selector de sesión Tmux.
Paso 1: crear un script de menú Tmux
Primero creamos un archivo llamado tmux_menu.sh
Tiene el siguiente contenido. Este script tomará sesiones tmux existentes, se las mostrará al usuario y le permitirá conectarse a una de las sesiones o crear una nueva.
#!/bin/bash # Get a list of existing tmux sessions: TMUX_SESSIONS=$(tmux ls | awk -F: '{print $1}') # If there are no existing sessions: if [[ -z $TMUX_SESSIONS ]]; then echo "No existing tmux sessions. Creating a new session called 'default'..." tmux new -s default else # Present a menu to the user: echo "Existing tmux sessions:" echo "$TMUX_SESSIONS" echo "Enter the name of the session you want to attach to, or 'new' to create a new session: " read user_input # Attach to the chosen session, or create a new one: if [[ $user_input == "new" ]]; then echo "Enter name for new session: " read new_session_name tmux new -s $new_session_name else tmux attach -t $user_input fi fi
Guarde este script en un archivo llamado tmux_menu.sh
en su directorio personal.
Descripción del guión:
Analicemos el guión proporcionado pieza por pieza:
1. Guión Shebang:
#!/bin/bash
Sherbón (#!/bin/bash
) se utiliza para especificar el intérprete para ejecutar el script.En este caso lo es bash
.
2. Obtenga una sesión tmux existente:
# Get a list of existing tmux sessions: TMUX_SESSIONS=$(tmux ls | awk -F: '{print $1}')
En este fragmento, tmux ls
Enumere todas las sesiones tmux existentes. La salida se canaliza (|
) llegar awk
y luego procesarlo para extraer solo el nombre de la sesión (antes de los dos puntos) :
).Estos nombres se almacenan en variables. TMUX_SESSIONS
.
3. Verifique las sesiones tmux existentes:
# If there are no existing sessions: if [[ -z $TMUX_SESSIONS ]]; then echo "No existing tmux sessions. Creating a new session called 'default'..." tmux new -s default else ... fi
Aquí, el bloque if-else comprueba si TMUX_SESSIONS
esta vacio (-z
Compruebe si hay cadenas de longitud cero).Si está vacío, significa que no existe ninguna sesión, por lo que se creará una nueva sesión denominada «predeterminada». tmux new -s default
.Si no está vacío, el script continuará ejecutándose. else
obstruido.
4. Mostrar sesiones existentes y avisar al usuario.:
# Present a menu to the user: echo "Existing tmux sessions:" echo "$TMUX_SESSIONS" echo "Enter the name of the session you want to attach to, or 'new' to create a new session: " read user_input
adentro else
Dentro del bloque, el script primero muestra la sesión tmux existente. Luego solicita al usuario que ingrese el nombre de una sesión existente para adjuntar o que escriba «nueva» para crear una nueva sesión.este read
El comando se utiliza para capturar la entrada del usuario.
5. Procesar la entrada del usuario:
# Attach to the chosen session, or create a new one: if [[ $user_input == "new" ]]; then echo "Enter name for new session: " read new_session_name tmux new -s $new_session_name else tmux attach -t $user_input fi
Utilice otro bloque if-else para manejar los pasos posteriores según la entrada del usuario.Si el usuario ingresa «nuevo», se le pedirá que ingrese un nombre para la nueva sesión y luego use tmux new -s $new_session_name
.Si el usuario ingresa el nombre de una sesión existente, el script se agregará a esa sesión usando tmux attach -t $user_input
.
En definitiva, el script proporciona una interfaz de usuario sencilla al iniciar sesión y se puede adjuntar a una sesión tmux existente o crear una nueva sesión tmux, mejorando así la experiencia del usuario al gestionar múltiples sesiones tmux.
Paso 2: hacer ejecutable el script
Otorgue permisos de ejecución al script usando el siguiente comando:
$ chmod +x ~/tmux_menu.sh
Paso 3: actualice su archivo de configuración de Bash
Ahora actualiza tu ~/.bash_profile
Puede crear un archivo en el sistema remoto que llame a este script cuando inicie sesión a través de SSH, pero solo si aún no está en una sesión tmux y el shell es interactivo.
abre tu ~/.bash_profile
Crea el archivo en tu editor favorito:
$ nano ~/.bash_profile
Agregue las siguientes líneas:
# If not inside a tmux session, and if the shell is interactive, then run the tmux menu script if [[ -z "$TMUX" ]] && [[ $- == *i* ]]; then ~/tmux_menu.sh fi
Guarde el archivo y ciérrelo presionando CTRL+O
seguido por CTRL+X
.
Paso 4: Pruebe la configuración del menú de selección de sesión de Tmux
1. Desde su computadora local, use el siguiente comando para conectarse al sistema remoto a través de SSH: ssh user@remote_system
.
ejemplo:
$ ssh [email protected]
Después de iniciar sesión correctamente, se conectará automáticamente a ‘por defecto’ Sesión Tmux.
2. Después de iniciar sesión en el sistema remoto, cree varias sesiones tmux ejecutando los siguientes comandos:
$ tmux new -s tmux1 -d
$ tmux new -s tmux2 -d
El comando anterior establecerá dos sesiones Tmux independientes, a saber Multiplexor 1 y Multiplexor 2.
Verifiquémoslos enumerando las sesiones tmux disponibles:
$ tmux ls
Salida de ejemplo:
default: 1 windows (created Mon Oct 2 13:31:25 2023) tmux1: 1 windows (created Mon Oct 2 13:32:28 2023) tmux2: 1 windows (created Mon Oct 2 13:32:32 2023)
Como puede ver, hay 3 sesiones de Tmux (predeterminada, tmux1 y tmux2) en mi servidor remoto Debian 12.
3. Ahora desconéctese de la sesión tmux usando el siguiente comando (si está conectado a una) Ctrl+b
seguido por d
.
Cierre sesión en la sesión SSH actual.
4. SSH al sistema remoto nuevamente y ahora debería ver varias sesiones enumeradas en el menú de selección de sesión de tmux.
$ ssh [email protected] Linux debian12 6.1.0-10-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.38-1 (2023-07-14) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Mon Oct 2 13:44:33 2023 from 192.168.1.101 Existing tmux sessions: default tmux1 tmux2 Enter the name of the session you want to attach to, or 'new' to create a new session:
5. Como puede ver en el resultado, el menú de selección de sesión de Tmux enumera tres sesiones de tmux existentes. Si desea conectarse a cualquiera de las sesiones enumeradas, simplemente escriba el nombre de la sesión tmux y presione ENTER y automáticamente se conectará a la sesión correspondiente.
Si no desea conectarse a una sesión existente sino crear una nueva sesión, escriba «nueva» seguido del nombre de la nueva sesión.
Después de ingresar el nombre de la nueva sesión de tmux, presione ENTER y se conectará a la nueva sesión de tmux.
Tenga en cuenta que el menú de selección de sesión de tmux solo se muestra cuando hay dos o más sesiones de tmux activas. Si no hay sesiones activas, se inicia automáticamente una nueva sesión «Predeterminada».
en conclusión
Con esta configuración, verá el menú de selección de sesión de tmux cada vez que acceda a un sistema remoto a través de SSH. Esto le permite gestionar mejor sus sesiones de tmux, proporcionando un entorno de trabajo remoto más organizado y eficiente.
Ahora, la próxima vez que se conecte a un sistema remoto a través de SSH, podrá conectarse a una sesión tmux existente o crear una nueva, lo que le ayudará a mantenerse organizado y accesible.