Cómo usar el comando de pantalla para evitar la terminación inesperada de la sesión SSH

Cómo usar el comando de pantalla para evitar la terminación inesperada de la sesión SSH

Problema de desconexión de SSH

Su sesión de terminal puede cerrarse debido a varios problemas de red mientras está
ejecutar un proceso en una máquina remota, por ejemplo,.:

# Escribir fallado: tubería rota 

Como resultado de esta desconexión de la red, su sesión de shell SSH también matará inadvertidamente cualquier procesamiento infantil ejecutado bajo su ssh Sesión en la máquina remota.

Ejecutar una solución de sesión SSH ininterrumpida

Utilizar el pantalla comando para guardar la sesión. Mientras su sesión SSH se desconecta, el comando de pantalla mantendrá su proceso remoto en funcionamiento. Considere un siguiente ejemplo de SSH donde intentamos SSH de un anfitrión local 10.1.1.2 a distancia 10.1.1.15 anfitrión.

Ejemplo de comando de pantalla ssh

Comencemos por enumerar nuestras sesiones de pantalla abiertas actualmente:

Local> $ Screen -List No se encuentran enchufes en/var/run/screen/s -lubos. 

De lo anterior pantalla Salida del comando Podemos ver que actualmente no tenemos sesiones abiertas. Creemos un nuevo pantalla Sesión mientras nosotros al mismo tiempo ssh a un host remoto. Abra la nueva terminal e ingrese:

local> $ pantalla ssh [email protected] 

Enumere nuestras sesiones de pantalla nuevamente:

Local> $ Screen -LIST hay una pantalla en: 5646.pts-0.TheBeast (13/05/15 16:49:30) (adjunto) 1 enchufe en/var/run/screen/s-lubos. 

Lo anterior pantalla La salida muestra que tenemos una sesión conectada con PID ID 5646. En este momento podemos iniciar un proceso en un host remoto en cuanto a un ejemplo, podemos realizar un ping simple:

remoto> # ping 8.8.4.4 ping 8.8.4.4 (8.8.4.4) 56 (84) bytes de datos. 64 bytes de 8.8.4.4: icmp_req = 1 ttl = 57 tiempo = 18.2 ms 64 bytes de 8.8.4.4: icmp_req = 2 ttl = 57 tiempo = 17.2 ms 64 bytes de 8.8.4.4: icmp_req = 3 ttl = 57 tiempo = 18.0 ms 

En esta etapa podemos simular una desconexión de red a un host remoto desconectando manualmente el cable de red:

local> $ ping 10.1.1.15 ping 10.1.1.15 (10.1.1.15) 56 (84) bytes de datos. De 10.1.1.2 ICMP_SEQ = 9 Host de destino inalámbrico desde 10.1.1.2 ICMP_SEQ = 10 Host de destino inalámbrico desde 10.1.1.2 icmp_seq = 11 host de destino inalcial ^c --- 10.1.1.15 Estadísticas de ping --- 13 paquetes transmitidos, 0 recibidos, +3 errores, pérdida de paquetes 100%, tiempo de 12088 ms tubería 3 

En este punto hemos perdido la conexión y nuestro ssh La sesión se congelará. Ahora podemos cerrar la ventana del terminal con desconectado ssh SESIÓN Y Lista nuestras pantallas:

Local> $ Screen -LIST hay una pantalla en: 5646.pts-0.TheBeast (13/05/15 16:49:30) (separado) 1 enchufe in/var/run/screen/s-lubos. 

Como podemos ver, nuestra sesión de pantalla ahora está separada. A continuación, recreamos una conexión de red a un host remoto:

local> $ ping 10.1.1.15 ping 10.1.1.15 (10.1.1.15) 56 (84) bytes de datos. 64 bytes de 10.1.1.15: icmp_seq = 1 ttl = 64 time = 0.951 ms 64 bytes de 10.1.1.15: icmp_seq = 2 ttl = 64 time = 0.563 ms ^c --- 10.1.1.15 Estadísticas de ping --- 2 paquetes transmitidos, 2 recibidos, 0% de pérdida de paquetes, tiempo 1001 ms rtt min/avg/max/mdev = 0.563/0.757/0.951/0.194 MS 

En este punto, podemos volver a reiniciar a nuestra sesión SSH remota previamente abierta:

local> $ pantalla -d -r 64 bytes de 8.8.4.4: icmp_req = 203 ttl = 57 tiempo = 18.2 ms 64 bytes de 8.8.4.4: icmp_req = 204 ttl = 57 tiempo = 18.1 ms 64 bytes de 8.8.4.4: icmp_req = 205 ttl = 57 tiempo = 18.1 ms 64 bytes de 8.8.4.4: icmp_req = 206 ttl = 57 tiempo = 18.4 ms 64 bytes de 8.8.4.4: icmp_req = 207 ttl = 57 tiempo = 18.1 ms ^c --- 8.8.4.4 Estadísticas de ping --- 207 paquetes transmitidos, 207 recibidos, 0% de pérdida de paquetes, tiempo 206310 ms rtt min/avg/max/mdev = 17.231/18.369/23.795/0.571 ms 

La salida anterior con 0% de pérdida de paquete es una prueba de que incluso nos hemos desconectado de una sesión remota por una falla de la red pantalla El comando mantuvo el proceso remoto vivo sin interrupción.

Tutoriales de Linux relacionados:

  • Cómo propagar una señal a los procesos infantiles de una fiesta ..
  • Cómo matar el proceso por nombre
  • Gestión de la lista de procesos y terminación automática de procesos
  • Cómo matar el proceso basado en el número de puerto en Linux
  • Introducción a las tuberías con nombre en Bash Shell
  • Cómo usar el comando killall en Linux
  • Guía de solución de problemas GNU/Linux General para principiantes
  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cómo iniciar procesos externos con Python y el ..
  • Comandos básicos de Linux