Tutoriales

5 formas de mantener activa tu sesión SSH después de desconectarte

SSH o recinto de seguridad En pocas palabras, esta es una forma de acceder de forma remota a otro usuario en otro sistema, pero sólo desde la línea de comandos (es decir, no en modo GUI). En términos más técnicos, cuando conectamos mediante ssh a otro usuario en otro sistema y ejecutamos un comando en esa máquina, en realidad crea un pseudo terminal y lo adjunta al shell de inicio de sesión del usuario que inició sesión.

Cuando salimos de la sesión o la sesión se agota después de estar inactiva por un período de tiempo, suspiro La señal se envía al pseudoterminal, y todos los trabajos que se ejecutan en ese terminal, incluso los trabajos cuyos trabajos principales se iniciaron en el pseudoterminal, reciben la señal SIGHUP y se terminan por la fuerza.

No te pierdas: 5 consejos prácticos para mantener tu servidor SSH seguro y protegido

Sólo los trabajos configurados para ignorar esta señal sobrevivirán a la terminación de la sesión. En los sistemas Linux, podemos tener muchas formas de hacer que estos trabajos se ejecuten en un servidor remoto o en cualquier máquina, incluso después de que el usuario cierre la sesión y finalice la sesión.

Comprender los procesos en Linux

proceso normal

Un proceso normal es un proceso con una duración de sesión. Se inician como procesos en primer plano durante una sesión y finalizan durante un lapso de tiempo específico o cuando la sesión se cierra. El propietario de estos procesos es cualquier usuario válido del sistema, incluido el root.

Proceso huérfano

Los procesos huérfanos son aquellos que originalmente tenían un proceso principal que creó el proceso, pero después de un tiempo el proceso principal murió o falló inadvertidamente, lo que convirtió a init en el proceso principal de ese proceso. Dichos procesos tienen init como padre directo y esperan estos procesos hasta que mueran o finalicen.

demonio

Estos son algunos procesos intencionalmente huérfanos; dichos procesos que se ejecutan intencionalmente en el sistema se denominan demonios o procesos intencionalmente huérfanos. Por lo general, son procesos de larga duración que una vez iniciados y luego desconectados de cualquier terminal de control para que puedan ejecutarse en segundo plano hasta que no se completen o, eventualmente, arrojen un error. El proceso padre de dicho proceso muere intencionalmente, dejando el proceso hijo ejecutándose en segundo plano.

Técnicas para mantener una sesión SSH en ejecución después de la desconexión

Hay varias formas de mantener una sesión ssh en ejecución después de haber sido desconectada, como se describe a continuación:

1. Utilice el comando de pantalla para mantener la sesión SSH en ejecución.

Pantalla es un administrador de ventanas de texto para Linux que permite a los usuarios administrar múltiples sesiones de terminal simultáneamente, cambiar entre sesiones, registrar registros de sesiones en ejecución en la pantalla e incluso reanudar la sesión en cualquier momento que deseemos sin tener que preocuparse de que se cierre la sesión o el terminal.

Las sesiones de pantalla se pueden iniciar, luego desconectar del terminal de control, dejarlas ejecutándose en segundo plano y luego reanudarlas en cualquier momento o incluso en cualquier lugar. Simplemente inicie una sesión en la pantalla, luego desconéctela del pseudo terminal (o terminal de control) y cierre la sesión cuando sea necesario. Cuando se sienta mejor, podrá volver a iniciar sesión y reanudar su sesión.

Sesión de pantalla de inicio

Después de escribir ‘Pantalla’ comando, ingresará a una nueva sesión de pantalla en la que podrá crear nuevas ventanas, atravesar ventanas, bloquear la pantalla y realizar muchas operaciones que puede realizar en una terminal normal.

$ screen
Iniciar una sesión de pantalla en Linux

Una vez que se inicia la sesión de pantalla, puede ejecutar cualquier comando y mantener la sesión en ejecución separándolo.

Ejecutar un comando en una sesión de pantalla
Ejecutar un comando en una sesión de pantalla
Desmontar la pantalla

Cuando quieras cerrar sesión en una sesión remota, pero quieras mantener activa la sesión creada en ese ordenador, solo tendrás que desconectar la pantalla del terminal para que ya no tenga un terminal controlador. Una vez hecho esto, puede cerrar sesión de forma segura.

Para despegar la pantalla del terminal remoto basta con pulsar “Ctrl+a” Inmediatamente después “d” Volverás a la terminal y verás un mensaje que indica que la pantalla se ha desprendido. Ahora puede cerrar sesión de forma segura y su sesión permanecerá activa.

Separar sesión de pantalla de Linux
Separar sesión de pantalla de Linux
Restaurar una sesión de pantalla separada

Si desea reanudar la sesión de pantalla dividida que dejó antes de cerrar sesión, simplemente vuelva a iniciar sesión en el terminal remoto y escriba “screen -r” Si solo hay una pantalla abierta y hay varias sesiones de pantalla abiertas, ejecute “screen -r .

$ screen -r
$ screen -r 
Restaurar una sesión de pantalla separada
Restaurar una sesión de pantalla separada

Para obtener más información sobre el comando de pantalla y cómo usarlo, siga el enlace: Administrar sesiones de terminal de Linux usando el comando de pantalla

2. Utilice Tmux (multiplexor de terminal) para mantener la sesión SSH en ejecución

multiplexor es otro software que fue creado para reemplazar Pantalla. Tiene la mayoría de las siguientes características. Pantallacon pocas funciones adicionales que lo hacen más potente que la pantalla.

Además de todas las opciones proporcionadas por la pantalla, también permite dividir paneles horizontal o verticalmente entre varias ventanas, cambiar el tamaño de los paneles de las ventanas, monitorear la actividad de la sesión, crear secuencias de comandos usando el modo de línea de comandos y más. Debido a estas características de tmux, ha sido ampliamente adoptado por casi todas las distribuciones Unix e incluso está incluido en el sistema base de OpenBSD.

Iniciar una sesión de Tmux

Después de ejecutar ssh en el host remoto y escribir multiplexorentrarás en una nueva sesión y se abrirá frente a ti una nueva ventana, donde podrás realizar cualquier operación que realizarías en un terminal normal.

$ tmux
Iniciar una sesión de terminal tmux
Iniciar una sesión de terminal tmux

Después de realizar operaciones en el terminal, puede desconectar esa sesión del terminal de control para que pase a segundo plano y pueda cerrar sesión de forma segura.

Ejecutar comandos de Linux en una sesión de Tmux
Ejecutar comandos de Linux en una sesión de Tmux
Separar la sesión de Tmux del terminal

o puedes correr “tmux detach” Mientras ejecuta una sesión tmux o puede usar el acceso directo (Ctrl+b then d). Después de esto, su sesión actual se desconectará y regresará a la terminal donde podrá cerrar sesión de manera segura.

$ tmux detach
Separar sesión de Tmux en Linux
Separar sesión de Tmux en Linux
Restaurar una sesión cerrada de Tmux

Para reabrir una sesión que desconectó y dejó intacta cuando cerró sesión en el sistema, simplemente vuelva a iniciar sesión en la computadora remota e ingrese «tmux agregar» Vuelva a conectarse a la sesión cerrada y seguirá activa y funcionando.

$ tmux attach
Restaurar sesión cerrada de Tmux
Restaurar sesión cerrada de Tmux

Para obtener más información sobre tmux y cómo usarlo, siga el enlace: Administre múltiples terminales Linux con Tmux Terminal Multiplexer.

3. Utilice el comando nohup para continuar ejecutando la sesión SSH

Si no estás familiarizado con Pantalla o multiplexorpuedes usar Norte de Hap y envía el comando de ejecución prolongada a un segundo plano para que pueda continuar y el comando continuará ejecutándose en segundo plano. Luego podrá cerrar sesión de forma segura.

Usando el comando nohup le decimos al proceso que ignore suspiro Señal enviada por una sesión ssh cuando finaliza, lo que permite que los comandos persistan incluso después de cerrar la sesión. Cuando se cierra la sesión, el comando se desconecta del terminal de control y continúa ejecutándose en segundo plano como un demonio.

Utilice nohup para ejecutar comandos en segundo plano

Este es un escenario simple en el que ejecutamos el comando buscar para buscar un archivo en segundo plano de una sesión ssh usando nohup, después de lo cual la tarea se envía a segundo plano y el mensaje se devuelve inmediatamente. PID y trabajar IDENTIFICACIÓN procesal ([JOBID] PID).

# nohup find / -type f $gt; files_in_system.out 2>1 &
Ejecute comandos de Linux en segundo plano
Ejecute comandos de Linux en segundo plano
Reanude la sesión para ver si el trabajo aún se está ejecutando

Cuando vuelva a iniciar sesión, podrá verificar el estado del comando y traerlo de nuevo al primer plano usando 'fg %JOBID' Supervise su progreso y más. El resultado a continuación muestra que el trabajo se completó, ya que no aparece al volver a iniciar sesión y se proporciona el resultado que se muestra.

# fg %JOBID
Ejecute comandos de Linux en segundo plano
Ejecute comandos de Linux en segundo plano

4. Utilice el comando disow para mantener la sesión SSH en ejecución.

Otra forma elegante de ejecutar un comando o una tarea individual en segundo plano y permanecer activo incluso después de que la sesión se cierre o se desconecte es usar denegar.

denegarelimine el trabajo de la lista de trabajos de proceso del sistema para que el proceso no finalice durante la desconexión de la sesión porque no recibirá suspiro a través del shell cuando cierras la sesión.

La desventaja de este enfoque es que sólo se puede utilizar para trabajos que no requieren ningún insumo. entrada estándar No es necesario escribir a salida estándara menos que redirija específicamente la entrada y salida del trabajo, ya que el trabajo intentará entrada estándar o salida estándarse detendrá.

Utilice disow para ejecutar comandos en segundo plano

A continuación, enviamos departamento El comando se envía a segundo plano para que ut continúe ejecutándose y se elimine de la lista de trabajos. Como se muestra en la imagen, el trabajo se pausa primero y luego todavía está en la lista de trabajos. Número de proceso: 15368.

$ ping tecmint.com > pingout &
$ jobs -l
$ disown -h %1
$ ps -ef | grep ping
Utilice Disow para ejecutar comandos de Linux
Utilice Disow para ejecutar comandos de Linux

Después de que esta señal de rechazo se envía al trabajo, se elimina de la lista de trabajos pero aún se ejecuta en segundo plano. Cuando vuelva a iniciar sesión en el servidor remoto, el trabajo seguirá ejecutándose como se muestra a continuación.

$ ps -ef | grep ping
Verificar el estado del trabajo
Verificar el estado del trabajo

5. Ejecute la sesión SSH usando el comando setsid

Otra utilidad para lograr el comportamiento deseado es valor establecido. Norte de Hap Existe la desventaja de que el grupo de procesos de un proceso permanece sin cambios, por lo que un proceso que se ejecuta con nohup es susceptible a cualquier señal enviada a todo el grupo de procesos (p. ej. Ctrl + C).

valor establecido Por otro lado, al proceso en ejecución se le asigna un nuevo grupo de procesos, por lo que el proceso creado está completamente en el grupo de procesos recién asignado y puede ejecutarse de forma segura incluso después de cerrar la sesión sin temor a ser eliminado.

Ejecute cualquier comando usando setsid

Aquí muestra el proceso. ‘sleep 10m’ Separado del terminal de control desde su creación.

$ setsid sleep 10m
$ ps -ef | grep sleep
Ejecute comandos de Linux usando Setsid
Ejecute comandos de Linux usando Setsid

Ahora, cuando vuelva a iniciar sesión, aún encontrará el proceso ejecutándose.

$ ps -ef | grep [s]leep
Proceso de Linux ejecutándose en segundo plano
Proceso de Linux ejecutándose en segundo plano

en conclusión

¿Qué métodos puede considerar para mantener el proceso en ejecución incluso después de cerrar la sesión SSH? Si se le ocurre algún otro método que funcione, menciónelo en los comentarios.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba