Búsqueda de sitios web

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


SSH o Secure Shell en términos simples es una forma mediante la cual 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 sin GUI. En términos más técnicos, cuando nos conectamos con 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.

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 todos los trabajos que se han ejecutado en ese terminal, incluso los trabajos cuyos trabajos principales se inician en el pseudoterminal también reciben la señal SIGHUP y se ven obligados a finalizar.

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

Sólo los trabajos que se han configurado 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 ejecutar estos trabajos en el 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

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 lapso 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 falló involuntariamente, lo que convirtió a init en el padre de ese proceso. Dichos procesos tienen a init como su padre inmediato, que espera estos procesos hasta que mueren o terminan.

Proceso del demonio

Estos son algunos procesos intencionalmente huérfanos; los procesos que intencionalmente se dejan ejecutándose 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 terminen arrojando un error. El padre de tales procesos muere intencionalmente haciendo que el niño 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 en ejecución en la pantalla e incluso reanudar la sesión en cualquier momento que deseemos. sin preocuparse 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 dejándolas ejecutándose en segundo plano y luego reanudarse en cualquier momento e incluso en cualquier lugar. Sólo necesita iniciar su sesión en la pantalla y cuando lo desee, desconectarlo del pseudo-terminal (o del terminal de control) y cerrar sesión. Cuando lo sientas, puedes 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 esta sesión puede crear nuevas ventanas, atravesar ventanas, bloquear la pantalla y hacer muchas más cosas que puede hacer en Un terminal normal.

screen

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

Desmontar una pantalla

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

Para desconectar una pantalla del terminal remoto, simplemente presione “Ctrl+a” seguido inmediatamente de “d” y regresará al terminal viendo el mensaje de que la pantalla está desprendido. Ahora puede cerrar sesión de forma segura y su sesión permanecerá activa.

Reanudar la sesión de pantalla separada

Si desea reanudar una sesión de pantalla separada que abandonó antes de cerrar sesión, simplemente vuelva a iniciar sesión en el terminal remoto y escriba “screen -r ” en caso de que solo se abra una pantalla y si hay varias. Las sesiones de pantalla se abren y ejecutan “screen -r .

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

Para obtener más información sobre el comando de pantalla y cómo usarlo, simplemente siga el enlace: Usar 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 screen, con algunas capacidades adicionales que lo hacen más poderoso que screen.

Permite, además de todas las opciones que ofrece la pantalla, dividir 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 secuencias de comandos usando el modo de línea de comando, etc. Debido a estas características de tmux, ha disfrutado de una amplia adopción por parte de casi todas las distribuciones Unix e incluso ha sido 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, ingresará a una nueva sesión con una nueva ventana abriéndose frente a usted, donde podrá hacer cualquier cosa que haga en una terminal normal.

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 sesión de forma segura.

Separar la sesión de Tmux de la terminal

Puede ejecutar “tmux detach ” al ejecutar la sesión tmux o puede usar 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 sesión de forma segura.

tmux detach

Reanudar 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 adjunto” para volver a conectarse a la sesión cerrada y Seguirá ahí y funcionando.

tmux attach

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

3. Uso del comando nohup para seguir ejecutando sesiones SSH

Si no está muy familiarizado con screen o tmux, puede usar nohup y enviar su comando de ejecución prolongada a un segundo plano para poder continuar mientras el comando seguirá ejecutándose en segundo plano. Después de eso, puedes cerrar 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 de cerrar la sesión. Al cerrar la sesión, el comando se elimina del terminal de control y continúa ejecutándose en segundo plano como un proceso demonio.

Ejecutando comando usando nohup en segundo plano

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

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

Reanudar 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, volver a ponerlo en primer plano usando 'fg %JOBID' para monitorear su progreso, etc. 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.

fg %JOBID

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 de cerrar sesión o desconectarse es usando disown.

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

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

Ejecutando comando usando disow 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 linux-console.net > pingout &
jobs -l
disown -h %1
ps -ef | grep ping

Después de que 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 ve a continuación.

ps -ef | grep ping

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 forma segura sin temor a ser eliminado incluso después de cerrar la sesión.

Ejecute cualquier comando usando setsid

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

setsid sleep 10m
ps -ef | grep sleep

Ahora, cuando vuelva a iniciar sesión, este proceso seguirá ejecutándose.

ps -ef | grep [s]leep

Conclusión

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