5 formas de mantener las sesiones y los procesos SSH remotos en ejecución después de la desconexión

5 formas de mantener las sesiones y los procesos SSH remotos en ejecución después de la desconexión

SSH. o Secure Shell. en términos simples es una forma en la que una persona puede acceder de forma remota a otro usuario en otro sistema, pero solo en la línea de comandos, es decir, en modo no GUI. En términos más técnicos, cuando conectamos a otro usuario en algún otro sistema y ejecutamos comandos 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.

 Mantener las sesiones SSH en ejecución después de la desconexión  Mantener las sesiones SSH en ejecución después de la desconexión 5 formas de mantener las sesiones SSH en ejecución después de la desconexión

Cuando cerramos la sesión o la la sesión se agota después de estar inactiva durante bastante tiempo, la señal SIGHUP. se envía al pseudo-terminal y a todos los trabajos que se han ejecutado en ese te rminal, incluso los trabajos que tienen sus trabajos padres iniciados en el pseudo-terminal también reciben la señal SIGHUP y son forzados a terminar.

No se pierda: 5 prácticas útiles para mantener el servidor SSH seguro y protegido

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

Entender los procesos en Linux

Proceso normal

Los procesos normales son aquellos que tienen la duración de una sesión, se inician durante la sesión como procesos en primer plano y terminan en un período de tiempo determinado o cuando se cierra la sesión. Estos procesos tienen a su propietario como cualquiera de los usuarios válidos del sistema, incluido el root.

Proceso huérfano

Los procesos huérfanos son aquellos que inicialmente tenían un padre que creó el proceso, pero después de algún tiempo, el proceso padre murió involuntariamente. o se bloqueó, lo que hace que init sea el padre de ese proceso. Dichos procesos tienen a init como pariente inmediato t que espera en estos procesos hasta que mueren o terminan.

Daemon Process freestar.config.enabled_slots.push

Estos son algunos intencionalmente huérfanos procesos, los procesos que se dejan intencionalmente en ejecución en el sistema se denominan demonios o procesos intencionalmente huérfanos. Por lo general, son procesos de larga ejecución que se inician una vez y luego se desconectan de cualquier terminal de control para que puedan ejecutarse en segundo plano hasta que no se completen o terminen arrojando un error. El padre de tales procesos muere intencionalmente haciendo que el hijo se ejecute en segundo plano.

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

Puede haber varias formas de dejar las sesiones ssh ejecutándose después de la desconexión, como se describe a continuación:

1. Uso del comando de pantalla para mantener las sesiones SSH en ejecución

screen. es un administrador de ventanas de texto para Linux que permite al usuario administrar múltiples sesiones de terminal al mismo tiempo, cambiar entre sesiones, registrar sesiones para las sesiones en ejecución en pantalla, e incluso reanudar la sesión en cualquier momento que deseemos sin preocuparnos de que se cierre la sesión o se cierre el terminal.

Las sesiones de pantalla se pueden iniciar y luego desconectar del terminal de control dejando ejecutarlos en segundo plano y luego reanudarlos en cualquier momento e incluso en cualquier lugar. Solo necesitas iniciar tu sesión en la pantalla y cuando quieras, desconectarla del pseudo-terminal (o el terminal de control) y cerrar la sesión. Cuando se sienta, puede volver a iniciar sesión y reanudar la sesión.

Iniciar una sesión de pantalla

Después de escribir el comando ‘pantalla’. estará en una nueva sesión de pantalla, dentro de este En la sesión, puede crear nuevas ventanas, pasar de una ventana a otra, bloquear la pantalla y hacer muchas más cosas que puede hacer en una terminal normal.

$ pantalla  Pantalla de inicio Sesión en Linux  Sesión de pantalla de inicio en Linux Sesión de pantalla de inicio en Linux

Una vez iniciada la sesión de pantalla, puede ejecutar cualquier comando y mantener la sesión en ejecución desconectando la sesión.

 Ejecutar comandos en la sesión de pantalla  Ejecutar comandos en la sesión de pantalla Ejecutar comandos en la sesión de pantalla Separar una pantalla

Justo cuando desea cerrar la sesión remota, pero desea mantener viva la sesión que creó en esa máquina, lo que debe hacer es desconectar la pantalla del terminal para que no quede ningún terminal de control. Después de hacer esto, puede cerrar la sesión de manera segura.

Para separar una pantalla del terminal remoto, simplemente presione “Ctrl + a” inmediatamente seguido de “d” y volverá al terminal viendo el mensaje que la pantalla está separada. Ahora puede cerrar la sesión de forma segura y su sesión se mantendrá viva.

 Separando la sesión de pantalla de Linux  Separando la sesión de pantalla de Linux Separando la sesión de pantalla de Linux Reanudando la sesión de pantalla desconectada

Si desea reanudar una sesión de pantalla desconectada que dejó antes de cerrar la sesión, simplemente vuelva a inicie sesión en el terminal remoto nuevamente y escriba “screen-r” en caso de que solo se abra una pantalla, y si se abren varias sesiones de pantalla, ejecute “screen-r ”.

$ pantalla-r $ pantalla-r  Reanudar sesión de pantalla separada  Reanudar sesión de pantalla separada Reanudar sesión de pantalla separada

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

2. Usando Tmux (Terminal Multiplexor) para mantener las sesiones SSH en ejecución

Tmux. es otro software que se creó para reemplazar la pantalla. Tiene la mayoría de las capacidades de pantalla. con pocas capacidades adicionales que la hacen más poderosa que la pantalla.

Permite, además de todas las opciones que ofrece la pantalla, dividir los paneles horizontalmente o verticalmente entre múltiples ventanas, cambiar el tamaño de los paneles de las ventanas, monitorear la actividad de la sesión, programar usando el modo de línea de comandos, etc. Debido a estas características de tmux, ha estado disfrutando de una amplia adopción por casi todas las distribuciones de Unix e incluso se ha incluido en el sistema base de OpenBSD .

Iniciar una sesión Tmux

Después de hacer ssh en el host remoto y escribir tmux. entrará en una nueva sesión con una nueva ventana que se abre frente a usted, en la que puede haga todo lo que haga en una terminal normal.

$ tmux  Inicio Sesión de terminal tmux Iniciar sesión de terminal tmux Inicio tmux Terminal Session

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

 Ejecutar comandos de Linux en la sesión de Tmux  Ejecutar comandos de Linux en la sesión de Tmux Ejecutar comandos de Linux en la sesión de Tmux Desconecte la sesión de Tmux de la terminal

O puede ejecutar“ tmux detach ”en la ejecución de tmux sesión o puede utilizar el acceso directo (Ctrl + b y luego d). Después de esto, su sesión actual se desconectará y volverá a su terminal desde donde podrá cerrar la sesión de forma segura.

$ tmux detach  Separar Sesión de Tmux en Linux  Desconectar sesión de Tmux en Linux Separar Tm ux Sesión en Linux Reanudación de la sesión cerrada de Tmux

Para volver a abrir la sesión que desconectó y dejó como estaba cuando salió del sistema, simplemente vuelva a iniciar sesión en la máquina remota y escriba “tmux attach”. para volver a adjuntar a la sesión cerrada y seguirá allí y ejecutándose.

$ tmux attach  Reanudar sesión cerrada de Tmux  Resume Tmux Sesión cerrada Reanudar sesión cerrada de Tmux

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

3. Usando el comando nohup para seguir ejecutando sesiones SSH

Si no es así familiarizado con screen. o tmux. puede usar nohup. y enviar su comando de ejecución prolongada a segundo plano para que pueda continuar mientras el comando seguirá activo ejecutando en segundo plano. Después de eso, puede cerrar la sesión de manera segura.

Con el comando nohup le decimos al proceso que ignore la señal SIGHUP. que es enviada por la sesión ssh al finalizar, haciendo que el comando persista incluso después de cierre de sesión. Al cerrar la sesión, el comando se desconecta del terminal de control y sigue ejecutándose en segundo plano como proceso demonio.

Ejecutando el comando usando nohup en segundo plano

Aquí hay un escenario simple en el que hemos ejecutado el comando find para buscar archivos en segundo plano en la sesión ssh usando nohup, después de lo cual la tarea se envió a segundo plano con un mensaje que regresa inmediatamente dando PID. y el ID de trabajo. del proceso ([JOBID] PID).

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

Cuando vuelva a iniciar sesión, puede verificar el estado del comando, traerlo de vuelta al primer plano usando ‘fg% JOBID ‘para monitorear su progreso y así sucesivamente. A continuación, el resultado muestra que el trabajo se completó, ya que no se muestra al volver a iniciar sesión y ha proporcionado el resultado que se muestra.

setsid. por otro lado, asigna un nuevo grupo de procesos al proceso que se está ejecutando y, por lo tanto, el proceso creado está totalmente en un grupo de procesos recién asignado y puede ejecutarse de forma segura sin temor a ser eliminado incluso después del cierre de sesión.

Ejecute cualquier comando usando setsid

Aquí, muestra que el proceso ‘sleep 10m’ se ha separado del terminal de control, desde el momento en que se creó.

$ setsid dormir 10m $ ps-ef | grep sleep  Ejecutar el comando de Linux usando Setsid Ejecutar el comando de Linux usando Setsid R un comando de Linux usando Setsid

Ahora, cuando vuelva a iniciar sesión en la sesión, todavía encontrará este proceso en ejecución.

$ ps-ef | grep [s] leep  Proceso de Linux en ejecución en segundo plano Proceso de Linux en ejecución Fondo Proceso Linux en ejecución en segundo plano

Conclusión

¿Qué formas se le ocurren para mantener su proceso en ejecución incluso después de cerrar la sesión SSH? Si se le ocurre alguna otra forma eficiente, menciónelo en sus comentarios.