Cómo volver a conectarse a una sesión ssh desconectada

Cómo volver a conectarse a una sesión ssh desconectada

¿Hay alguna forma de conectarse a una sesión ssh que se desconectó? Estamos teniendo problemas con nuestra conexión de red a un sitio remoto en el que estamos trabajando por separado; sin embargo, mientras tanto experimentamos una gran cantidad de desconexiones debido a paquetes perdidos mientras estamos conectados a servidores en la ubicación remota. Muchas veces la sesión permanece activa por un tiempo y, a veces, sucede que está en medio de alguna acción (edición de archivos, ejecución de algún proceso, etc...) a la que necesito volver en lugar de reiniciar si es posible.

Respuesta1

ACTUALIZACIÓN: Para obtener una respuesta real, consulte la respuesta de zero_r a continuación

Esta no es una respuesta, sino una solución. Usarpantalla.

Cuando inicie sesión por primera vez, ejecute screen. Obtienes otro shell, ejecuta comandos en ese. Si está desconectado, el proceso de pantalla mantiene vivo el terminal para que su shell y los procesos que está ejecutando no caigan. Cuando te vuelvas a conectar, ejecuta 'screen -r' para reanudar.

Hay mucho más sobre cómo configurar y usar la pantalla, pero lo anterior debería solucionar su problema.

Respuesta2

Intente configurar ClientAliveInterval (por ejemplo, 60) y TCPKeepAlive (sí o no) con los valores apropiados en el sshd.conf del lado del servidor.

Esto debería mantener viva su sesión incluso si la conexión se pierde durante minutos.

Respuesta3

Como se ha mencionado más arriba,Pantalla GNUes el camino a seguir. Le permite tener una 'sesión de pantalla' en la caja remota en la que puede ejecutar múltiples comandos, a través de múltiples 'ventanas de pantalla'. Esto simplemente se desconectará si su conexión SSH principal muere, manteniendo vivos y en buen estado todos los subprocesos que se ejecutan dentro de ella.

man screenes tu amigo como siempre, y se debe llamar al paquete del sistema operativo screensi no está instalado de forma predeterminada.

Los conceptos básicos son:

  • Inicie una sesión de pantalla (en su host remoto):

      $ screen
    
  • Desconéctate de tu sesión de pantalla: CTRL-A,d

  • Vuelva a conectarse a su sesión de pantalla después de volver a iniciar sesión:

      $ screen -d -r
    
  • Abra otra 'ventana' de pantalla: CTRL-A,c

  • Recorra las ventanas de la pantalla abierta: CTRL-A,space

Haylotesde cosas interesantes que puedes hacer con la pantalla. Lo he estado usando durante más de 10 años y todavía estoy descubriendo nuevas funciones. Es mi utilidad Unix favorita.

Respuesta4

A veces también me olvidaba de ejecutar la pantalla y perdía mi trabajo sin terminar. En este caso, aunque no podemos volver a conectarnos a una sesión SSH rota, aún es posible volver a conectar un programa en ejecución a una nueva terminal y reanudar lo que estaba haciendo gracias a reptyr.

Después de desconectarse accidentalmente de una sesión SSH, lo primero que debe hacer es ejecutar screen(o tmux, lo que quiera) para que la conexión no se rompa nuevamente. Luego, en la nueva sesión, ejecute ps aux | grep {The process to be resumed}para obtener el PID. Con el PID se podría intentar reptyr {PID}o reptyr -T {PID}(si hay subprocesos) continuar el trabajo.


Notas adicionales:

Además, considere configurar ClientAliveInterval (por ejemplo, 60) y TCPKeepAlive (sí o no) con los valores apropiados en el sshd.conf del lado del servidor.como se menciona en la respuesta de zero_r. O, si tiene que trabajar en un entorno de red con una tasa de pérdida de paquetes altísima como Starlink en tormenta,cambiar a MOSH, una alternativa SSH pero basada en UDP.

información relacionada