
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
Una vez que se inicia la sesión de pantalla, puede ejecutar cualquier comando y mantener la sesión en ejecución separándolo.

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.

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

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

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.

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

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

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 &

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

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

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

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

Ahora, cuando vuelva a iniciar sesión, aún encontrará el proceso ejecutándose.
$ ps -ef | grep [s]leep

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.









