SSH o Cubierta segura 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 accedemos a otro usuario en algún otro sistema y ejecutamos comandos en ese máquina, en realidad crea un pseudo-terminal y lo adjunta al shell de inicio de sesión del usuario registrado en.
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 pseudo-terminal y todos los trabajos que se han ejecutado en ese terminal, incluso los trabajos que se han sus trabajos principales que se inician en el pseudo-terminal 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
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.
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.
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ó 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.
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 duración que se inician una vez y luego se separan de cualquier control terminal 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.
Puede haber varias formas de dejar las sesiones ssh ejecutándose después de la desconexión, como se describe a continuació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, registro de sesiones para el ejecutar sesiones 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 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.
Después de escribir 'pantalla' comando, 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.
$ pantalla.
Una vez iniciada la sesión de pantalla, puede ejecutar cualquier comando y mantener la sesión en funcionamiento desconectando la sesión.
Justo cuando desea cerrar la sesión remota, pero desea mantener la sesión que creó en esa máquina vivo, entonces lo que debe hacer es desconectar la pantalla del terminal para que no tenga un terminal de control izquierda. 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á 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 se mantendrá viva.
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 "Pantalla -r"
en caso de que solo se abra una pantalla, y si se abren varias sesiones de pantalla, ejecute "Pantalla -r
.
$ pantalla -r. $ pantalla -r
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 las sesiones de la terminal de Linux
Tmux es otro software creado para reemplazar pantalla. Tiene la mayoría de las capacidades de pantalla, con pocas capacidades adicionales que lo hacen más poderoso que la pantalla.
Permite, además de todas las opciones que ofrece la pantalla, dividir los paneles horizontal o verticalmente entre múltiples ventanas, cambio de tamaño de los paneles de las ventanas, monitoreo de la actividad de la sesión, secuencias de comandos usando el modo de línea de comandos etc. Debido a estas características de tmux, ha disfrutado de una amplia adopción por parte de casi todas las distribuciones de Unix e incluso se ha incluido en el sistema base de OpenBSD.
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 un 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 la sesión de forma segura.
O puedes correr "Tmux separar"
en la ejecución de la sesión tmux o puede usar el acceso directo (Ctrl + b 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 separar.
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 "Adjuntar tmux" para volver a adjuntar a la sesión cerrada y todavía estará allí y funcionando.
$ tmux adjuntar.
Para obtener más información sobre tmux y cómo usarlo, simplemente siga el enlace: Utilice el multiplexor de terminales Tmux para administrar varios terminales Linux.
Si no está tan familiarizado con pantalla o tmux, puedes usar nohup y envíe su comando de larga duración 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 el SIGHUP señal que es enviada por 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.
Aquí hay un escenario simple en el que hemos ejecutado 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 con un mensaje que regresa inmediatamente dando PID y trabajo IDENTIFICACIÓN del proceso ([JOBID] PID)
.
# nohup find / -type f $ gt; files_in_system.out 2> 1 &
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.
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 el uso de renegar de.
Renegar de, elimina el trabajo de la lista de trabajos de proceso del sistema, por lo que el proceso está protegido para que no se elimine durante la desconexión de la sesión, ya que no recibirá SIGHUP por el shell al cerrar 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 a stdout, a menos que redireccione específicamente la entrada y salida de trabajos, porque cuando el trabajo intentará interactuar con stdin o stdout, se detendrá.
A continuación, enviamos silbido 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ó primero, después de lo cual todavía estaba en la lista de trabajos como ID de proceso: 15368.
$ ping tecmint.com> pingout y $ trabajos -l. $ disown -h% 1. $ ps -ef | grep ping.
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.
Otra utilidad para lograr el comportamiento requerido es setid. 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 se totalmente en un grupo de proceso recién asignado y puede ejecutarse de manera segura sin temor a ser asesinado incluso después de la sesión cerrar sesión.
Aquí, muestra que el proceso "Duerme 10 m"
se ha separado del terminal de control, desde el momento en que se creó.
$ setsid dormir 10m. $ ps -ef | grep dormir.
Ahora, cuando vuelva a iniciar sesión en la sesión, aún encontrará este proceso en ejecución.
$ ps -ef | grep [s] leep.
¿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 manera eficiente, menciónelo en sus comentarios.