GNU/Linux >> Tutoriales Linux >  >> Linux

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 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 nos comunicamos 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, el SIGHUP La señal se envía al pseudoterminal 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 terminar.

Don' Señorita: 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 la vida útil 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 elemento principal que creó el proceso, pero después de un tiempo, el proceso principal murió o se bloqueó involuntariamente, lo que convirtió a init en el elemento principal de ese proceso. Dichos procesos tienen init como su padre inmediato que espera estos procesos hasta que mueren o terminan.

Proceso demonio

Estos son algunos procesos huérfanos intencionales, los procesos que se dejan ejecutándose intencionalmente en el sistema se denominan procesos demonio o huérfanos intencionales. Por lo general, son procesos de ejecución prolongada 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 funcionando 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

pantalla 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 preocuparnos de que se cierre la sesión o la terminal está cerrada.

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 necesita iniciar su sesión en la pantalla y, cuando lo desee, desconectarla del pseudo-terminal (o del terminal de control) y cerrar sesión. Cuando lo sienta, puede volver a iniciar sesión y reanudar la sesión.

Inicio de una sesión de pantalla

Después de escribir ‘pantalla’ comando, estará en una nueva sesión de pantalla, dentro de esta sesión puede crear nuevas ventanas, moverse entre ventanas, bloquear la pantalla y hacer muchas más cosas que puede hacer en una terminal normal.

$ screen

Una vez iniciada la sesión de pantalla, puede ejecutar cualquier comando y mantener la sesión ejecutándose desconectando la sesión.

Separar una pantalla

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

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

Reanudación de la sesión de pantalla separada

Si desea reanudar una sesión de pantalla desconectada que dejó 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 se abren varias sesiones de pantalla, ejecute “screen -r <pid.tty.host>” .

$ 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 (terminal multiplexor) para mantener las sesiones SSH en ejecución

Tmux es otro software creado para reemplazar a screen . Tiene la mayoría de las capacidades de pantalla , con pocas funciones adicionales que lo hacen más potente que screen.

Además de todas las opciones que ofrece la pantalla, permite dividir los 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 scripts usando el modo de línea de comandos, etc. Debido a estas características de tmux, ha disfrutado 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 de Tmux

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

$ tmux

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

Separar la sesión Tmux de la terminal

O puede ejecutar “tmux detach” al ejecutar la sesión tmux o puede usar el atajo (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
Reanudación de la sesión Tmux cerrada

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 adjuntar” para volver a adjuntarla a la sesión cerrada y seguirá allí y ejecutándose.

$ tmux attach

Para obtener más información sobre tmux y cómo usarlo, simplemente siga el enlace:Use Tmux Terminal Multiplexer to Manage Multiple Linux Terminals.

3. Uso del comando nohup para seguir ejecutando sesiones SSH

Si no está tan familiarizado con la pantalla o tmux , puedes usar nohup y envíe su comando de ejecución prolongada al fondo 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 el SIGHUP señal 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 desconecta del terminal de control y sigue ejecutándose en segundo plano como un proceso daemon.

Ejecutando comando usando nohup en segundo plano

Aquí, hay un escenario simple en el que ejecutamos el comando de búsqueda 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 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, 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.

# 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 usar disown .

Desautorizar , elimina el trabajo de la lista de trabajos de proceso del sistema, por lo que el proceso está protegido contra la eliminación durante la desconexión de la sesión, ya que no recibirá SIGHUP por el shell cuando cierra 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 es necesario escribir en stdout , a menos que redirija específicamente la entrada y salida de trabajos, porque cuando el trabajo intentará interactuar con stdin o salida estándar , se detendrá.

Ejecutando comando usando disown en segundo plano

A continuación, enviamos ping comando en segundo plano para que ut siga ejecutándose y se elimine de la lista de trabajos. Como se ve, el trabajo se suspendió por primera vez, 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

Después de que la 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 seguiría ejecutándose cuando vuelva 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 ).

setid 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 de cerrar la sesión.

Ejecuta 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 sleep 10m
$ ps -ef | grep sleep

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

$ ps -ef | grep [s]leep

Conclusión

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


Linux
  1. Ssh:¿cómo rechazar un proceso en ejecución y asociarlo a un nuevo shell de pantalla?

  2. Ctrl-c Manejo en sesión Ssh?

  3. ¿Seguir ejecutando un programa de Python incluso después de cerrar la sesión de Ssh?

  4. ¿Cómo enumerar las sesiones de pantalla en ejecución?

  5. Mantener viva la sesión SSH

Comando de pantalla de Linux:mantenga los procesos en ejecución a pesar de una conexión interrumpida

Ejemplos de comandos de pantalla para administrar múltiples sesiones de terminal

Cómo mantener las sesiones SSH remotas en ejecución después de la desconexión

4 formas de transferir archivos entre sistemas remotos y locales a través de SSH

¿Cómo ver los procesos en ejecución de cualquier usuario en SSH?

Un chico de Windows en un mundo Linux:VS Code y SSH remoto