it-swarm-es.com

Cómo reconectarse a una sesión ssh desconectada

¿Hay alguna manera 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 la pérdida de paquetes mientras estamos conectados a servidores en la ubicación remota. Muchas veces la sesión permanece activa durante 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.

164
palehorse

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

Esta no es una respuesta, sino una solución alternativa. Use pantalla .

Cuando inicie sesión por primera vez, ejecute la pantalla. Obtienes otro Shell, ejecutas comandos en eso. Si está desconectado, el proceso de la pantalla mantiene vivo el terminal para que su Shell y los procesos que está ejecutando no se caigan. Cuando vuelva a conectarse, ejecute 'screen -r' para continuar.

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

142
kbyrd

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

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

134
zero_r

Como se mencionó anteriormente, Pantalla GN es el camino a seguir. Le permitirá 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 la conexión SSH de su padre se corta, manteniendo todos los subprocesos funcionando dentro de ella.

'man screen 'es tu amigo como siempre, y el paquete del sistema operativo debería llamarse' screen 'si no está instalado de manera 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-Ad

  • 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-Ac

  • Recorra las ventanas de la pantalla abierta: CTRL-Aspace

Ahi esta un montón de cosas geniales que puedes hacer con Screen. Lo he estado usando durante más de 10 años y todavía estoy descubriendo nuevas características. Es mi utilidad favorita de Unix.

64
Mike Pountney

No puedo creer que nadie haya mencionado MOSH ;

Mosh es un protocolo separado que puede conectarse al proceso de inicio de sesión SSH, mantiene viva su sesión después de días de desconexión, cambio de IP, alta latencia, etc. Se explica en la página de inicio mejor de lo que puedo explicarlo, así que he copiado la descripción a continuación. Mis experiencias y consejos son que lo uso en mi Android móvil, es un salvavidas cuando viajo y uso de SSH. Lo mismo es cierto en mi computadora portátil cuando estoy conectado con el móvil en el tren, por ejemplo Recomiendo compilar desde la fuente para obtener la última versión, la versión de repositorio para mí dentro de Ubuntu tiene algunas molestias que se corrigen en la versión más reciente (en el momento de la redacción).

Mosh (Shell móvil)

Aplicación de terminal remota que permite itinerancia, admite conectividad intermitente y proporciona eco local inteligente y edición de línea de las pulsaciones de teclas del usuario.

Mosh es un reemplazo para SSH. Es más robusto y receptivo, especialmente a través de Wi-Fi, celulares y enlaces de larga distancia.

Mosh es un software gratuito, disponible para GNU/Linux, FreeBSD, Solaris, Mac OS X y Android.

Características del sitio web:

  • Cambiar IP. Manténgase conectado : Mosh deambula automáticamente mientras se mueve entre las conexiones a Internet. Use Wi-Fi en el tren, Ethernet en un hotel y LTE en una playa: permanecerá conectado. La mayoría de los programas de red pierden sus conexiones después del roaming, incluidas las aplicaciones SSH y Web como Gmail, Mosh es diferente.

  • Hace dulces sueños : Con Mosh, puede poner su computadora portátil en modo de suspensión y despertarla más tarde, manteniendo su conexión intacta. Si su conexión a Internet se cae, Mosh le avisará, pero la conexión se reanudará cuando vuelva el servicio de red.

  • Deshágase del retraso de la red : SSH espera la respuesta del servidor antes de mostrarle su propia escritura. Eso puede crear una interfaz de usuario pésima. Mosh es diferente: da una respuesta instantánea a escribir, eliminar y editar líneas. Lo hace de forma adaptativa y funciona incluso en programas de pantalla completa como emacs y vim. En una mala conexión, las predicciones pendientes están subrayadas para que no se engañe.

  • Sin código privilegiado. No daemon : No necesita ser el superusuario para instalar o ejecutar Mosh. El cliente y el servidor son ejecutables ejecutados por un usuario común y solo duran la vida de la conexión.

  • Mismo método de inicio de sesión : Mosh no escucha en los puertos de red ni autentica a los usuarios. El cliente mosh inicia sesión en el servidor a través de SSH, y los usuarios presentan las mismas credenciales (por ejemplo, contraseña, clave pública) que antes. Luego, Mosh ejecuta el servidor mosh de forma remota y se conecta a él a través de UDP.

  • Se ejecuta dentro de su terminal, pero mejor : Mosh es un programa de línea de comandos, como ssh. Puede usarlo dentro de xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen o tmux. Pero mosh fue diseñado desde cero y solo admite un conjunto de caracteres: UTF-8. Soluciona errores Unicode en otros terminales y en SSH.

  • Control-C funciona muy bien : a diferencia de SSH, el protocolo basado en UDP de mosh maneja la pérdida de paquetes con gracia y establece la velocidad de cuadros en función de las condiciones de la red. Mosh no llena los buffers de red, por lo que Control-C
    siempre trabaja para detener un proceso desbocado.

47
jwbensley

autossh observa su conexión y si se cae, se vuelve a conectar. Es más confiable que keepalives. Si se conecta a una sesión de pantalla, continuará desde donde se desconectó (consulte rscreen que viene con autossh)

20
hayalci

tmux

Esto es un clásico. Úselo siempre que corra el riesgo de perder la conexión a un terminal.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Solo así, estás de vuelta en acción.

14
Jacksonkr

Instalaría e iniciaría la pantalla para solucionar su problema. La pantalla le permitirá volver a conectarse a una sesión de pantalla anterior.

Aparte de eso, la pantalla también te permite hacer cosas interesantes como dividir tu pantalla, ver la consola, etc. Puedes encontrar más información aquí y aquí .

Para empezar, si te desconectas, puedes usar

screen -ls

para ver tus sesiones y

screen -r ${session} 

para volver a conectar a uno desconectado.

10
wzzrd

Como otros han señalado, la pantalla es generalmente la mejor solución para esto y también agrega una gran cantidad de otras funciones útiles.

Puede configurar su perfil en la máquina remota para que se inicie y/o vuelva a conectar automáticamente a la pantalla al iniciar sesión, lo que le ahorra el olvido de iniciar la pantalla la única vez que la necesita porque sufre una caída de la conexión.

Consulte http://tlug.dnho.net/?q=node/239 (o busque en Google muchos otros ejemplos de formas ligeramente diferentes).

4
David Spillett

Aquí hay otra solución que no es de pantalla.

La bandeja PuTTY le permite hacer exactamente eso, tiene una opción de reconectar al desconectar que no está en modo regular o PuTTY-ng

https://puttytray.goeswhere.com/

es una bifurcación (completamente abierta) de PuTTY con otras opciones, vaya a la configuración de conexión y hay 2 opciones, una para 'intentar reconectarse en caso de falla de conexión' e 'intentar reconectarse al inicio'.

3
munkiepus

una alternativa más moderna a la pantalla, por desgracia, no está disponible para algunos tipos de "virtualización" (por ejemplo, en cygwin puede tener "pantalla", pero no "tmux" debido a la forma en que está diseñada), pero donde tenga la opción de instalar tmux , Recomiendo encarecidamente optar por esa pantalla.

3
cepal

Si bien la pantalla mantendrá su sesión de Shell abierta en el servidor remoto si su sesión ssh cae, no hará nada sobre el problema de las conexiones ssh que se caen. Como zero_r sugiere, intente ajustar su conexión ssh con keep alives y largos tiempos de espera.

Le sugiero que rastree la causa de los paquetes perdidos que causan los problemas y solucione eso en lugar de solucionarlo.

2
David

A veces también me olvidé de ejecutar la pantalla y perder mi trabajo inacabado. En este caso, aunque no podemos volver a conectarnos a una sesión SSH interrumpida, volver a enviar un programa en ejecución a un nuevo terminal y reanudar lo que estaba haciendo aún es posible gracias a reptyr.

Después de desconectarse accidentalmente de una sesión SSH, lo primero es ejecutar screen para evitar que la conexión se interrumpa nuevamente. Luego, en la nueva sesión, ejecute ps aux | grep {The process to be resumed} para obtener el PID. Con el PID, puedes probar reptyr {PID} o reptyr -T {PID} (si hay subprocesos) para continuar el trabajo.

2
march_happy