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 accedemos 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.

Mantenga las sesiones SSH en ejecución después de la desconexión5 formas de mantener las sesiones SSH en ejecución después de la desconexión

Cuando salimos de la sesión o 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 terminal, incluso los trabajos que tienen sus trabajos principales. que se inician en el pseudo-terminal también se les envía la señal SIGHUP y se les obliga a terminar.

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

Solo los trabajos que se han configurado para ignorar esta señal son los que sobreviven a la finalizació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 finalización de la sesión.

Comprender los procesos en Linux

Proceso normal

Los procesos normales son aquellos que tienen una 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 como propietario a 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 un tiempo, el proceso padre murió o se bloqueó involuntariamente, lo que hizo que init fuera el padre de ese proceso. Dichos procesos tienen a init como su padre inmediato, que espera estos procesos hasta que mueren o terminan.

Proceso de demonio

Estos son algunos procesos intencionalmente huérfanos, 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 la pantalla e incluso reanudar la sesión en cualquier momento que deseemos sin preocuparse de que la sesión se registre fuera o el terminal está cerrado.

Las sesiones de pantalla se pueden iniciar y luego desconectar del terminal de control dejándolas ejecutándose en segundo plano y luego reanudarse 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 &ltstrong&gt’pantalla’&lt/strong&gt , estará en una nueva sesión de pantalla, dentro de esta sesión puede crear nuevas ventanas, atravesar ventanas, bloquear la pantalla y hacer muchas más cosas que puede hacer en una terminal normal.

$ screen

Iniciar sesión de pantalla en LinuxIniciar sesión de pantalla en Linux

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

Ejecutar comandos en la sesión de pantallaEjecutar 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 forma segura.

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

Desconexión de la sesión de pantalla de LinuxDesconexión de la sesión de pantalla de Linux

Reanudación de la sesión de pantalla independiente

Si desea reanudar una sesión de pantalla separada que dejó antes de cerrar la sesión, simplemente vuelva a iniciar 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 <pid.tty.host>”.

$ screen -r
$ screen -r <pid.tty.host>

Reanudar sesión de pantalla separadaReanudar 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 de Linux

2. Uso de Tmux (multiplexor de terminal) para mantener las sesiones SSH en ejecución

Tmux es otro software creado para reemplazar la pantalla . Tiene la mayoría de las capacidades de la 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 horizontal o verticalmente entre múltiples ventanas, cambiar el tamaño de los paneles de las ventanas, monitorear la actividad de la sesión, crear scripts usando el modo de línea de comandos, etc. todas las distribuciones de Unix e incluso se ha incluido en el sistema base de OpenBSD.

Iniciar una sesión de 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 abrirá frente a usted, en la que podrá hacer cualquier cosa que haga en una terminal normal.

$ tmux

Iniciar sesión de terminal tmuxIniciar sesión de terminal tmux

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 TmuxEjecutar comandos de Linux en la sesión de Tmux

Desconectar la sesión de Tmux de la terminal

Puede ejecutar la “tmux detach”sesión tmux en ejecución o puede usar el acceso directo (Ctrl+b then 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

Desconectar la sesión de Tmux en LinuxDesconectar la sesión de Tmux 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 cerró la sesión del sistema, simplemente vuelva a iniciar sesión en la máquina remota y escriba “tmux attach” para volver a conectarse a la sesión cerrada y aún estará allí y ejecutándose .

$ tmux attach

Reanudar sesión cerrada de TmuxReanudar 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. Uso del comando nohup para seguir ejecutando sesiones SSH

Si no está tan 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á ejecutándose en segundo plano. Después de eso, puede cerrar la sesión de forma segura.

Con el comando nohup le decimos al proceso que ignore la señal SIGHUP que envía la sesión ssh al finalizar, lo que hace que el comando persista incluso después del 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 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 un segundo plano con un mensaje que regresa inmediatamente y proporciona el PID y la identificación del trabajo del proceso ([JOBID] PID).

# nohup find / -type f $gt files_in_system.out 2>1 &

Ejecute el comando de Linux en segundo planoEjecute el comando de Linux en segundo plano

Reanudación de 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 dado el resultado que se muestra.

# fg %JOBID

Ejecute el comando de Linux en segundo planoEjecute el comando de Linux en segundo plano

4. Uso del comando disown para mantener las sesiones SSH en ejecución

Otra forma elegante de permitir que su comando o una sola tarea se ejecute en segundo plano y permanezca vivo incluso después del cierre de sesión o la desconexión es mediante disown .

Disown , elimina el trabajo de la lista de trabajos de proceso del sistema, por lo que el proceso está protegido de ser eliminado durante la desconexión de la sesión, ya que no recibirá SIGHUP por el shell cuando cierre la sesión.

La desventaja de este método es que debe usarse solo para los trabajos que no necesitan ninguna entrada de stdin y tampoco necesitan escribir en stdout , a menos que redirija específicamente la entrada y salida de trabajos, porque cuando el trabajo intentará interactuar con stdin o stdout , se detendrá.

Ejecutando comando usando disown en segundo plano

A continuación, enviamos el comando ping al fondo para que ut siga ejecutándose y se elimine de la lista de trabajos. Como se ve, el trabajo se suspendió primero, después de lo cual todavía estaba en la lista de trabajos como ID de proceso: 15368 .

$ ping tecmint.com > pingout &
$ jobs -l
$ disown -h %1
$ ps -ef | grep ping

Ejecute comandos de Linux usando DisownEjecute comandos de Linux usando Disown

Después de esa señal de rechazo se pasó al trabajo y se eliminó de la lista de trabajos, aunque todavía se estaba ejecutando en segundo plano. El trabajo aún se estaría ejecutando cuando volviera a iniciar sesión en el servidor remoto como se muestra a continuación.

$ ps -ef | grep ping

Verificar el estado del trabajoVerificar el estado del trabajo

5. Uso del comando setsid para ejecutar sesiones SSH

Otra utilidad para lograr el comportamiento requerido es setsid . Nohup tiene una desventaja en el sentido de que el grupo de procesos del proceso sigue siendo el mismo, por lo que el proceso que se ejecuta con nohup es vulnerable a cualquier señal enviada a todo el grupo de procesos (como Ctrl + C).

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 manera 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 desvinculado del terminal de control, desde el momento en que se creó.

$ setsid sleep 10m
$ ps -ef | grep sleep

Ejecutar el comando de Linux usando SetsidEjecutar el comando de Linux usando Setsid

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

$ ps -ef | grep [s]leep

Proceso de Linux en ejecución en segundo planoProceso de Linux en ejecución en segundo plano

Conclusión

¿Qué formas se le ocurren para mantener el 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.

Comandos de Linux , SSH

Leave a Comment

Your email address will not be published. Required fields are marked *

Hazlo Linux