¿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 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.
linux
ssh
gnu-screen
caballo pálido
fuente
fuente
Respuestas:
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 alternativa. Usar 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 reanudar.
Hay mucho más para configurar y usar la pantalla, pero lo anterior debería solucionar su problema.
fuente
screen
ya estaba instalado en mi Ubuntu 12.x, así que si no está seguro, simplemente intente este comando, se reconectó y reanudó el proceso do-release-upgrade : sudo screen -D -rsudo
debe usarse solo si la sesión de pantalla original se inició con sudo. De lo contrario, volverá como si no existiera una sesión de pantalla:There is no screen to be detached
screen -r
era exactamente lo que estaba buscando.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.
fuente
Como se mencionó anteriormente, GNU Screen 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 su 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):
Desconectarse de la sesión de pantalla: CTRL-A,d
Vuelva a conectarse a su sesión de pantalla después de volver a iniciar sesión:
Abrir otra pantalla de 'ventana': CTRL-A,c
Ciclo a través de ustedes ventanas de la pantalla abierta: CTRL-A,space
Hay muchas 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.
fuente
No puedo creer que nadie haya mencionado a 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 móvil Android, es un salvavidas cuando viajo y hago SSH. Lo mismo es cierto en mi computadora portátil cuando, por ejemplo, atado al móvil en el tren. 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).
Características del sitio web:
Cambiar IP. Mantente conectado : Mosh deambula automáticamente mientras te mueves entre las conexiones a Internet. Utilice 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 reposo 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 necesitas 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 fotogramas según las condiciones de la red. Mosh no llena los buffers de red, por lo que Control-C
siempre trabaja para detener un proceso desbocado.
fuente
autossh vigila 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ó (vea
rscreen
que viene con autossh)fuente
rscreen
para esto.tmux
Esto es un clásico. Úselo siempre que corra el riesgo de perder la conexión a un terminal.
Solo así, estás de vuelta en acción.
fuente
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
para ver tus sesiones y
para volver a conectar a uno desconectado.
fuente
Como otros han señalado, la pantalla es generalmente la mejor solución para esto y también agrega una serie de otras características ú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).
fuente
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.
fuente
Aquí hay otra solución que no es de pantalla.
La bandeja de masilla le permite hacer exactamente eso, tiene una opción de reconexión en desconexión que no está en regular o masilla
https://puttytray.goeswhere.com/
es una bifurcación de masilla (de código abierto) 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'.
fuente
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.
fuente
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 ejecutarlo
screen
para que la conexión no se vuelva a romper. Luego, en la nueva sesión, ejecuteps aux | grep {The process to be resumed}
para obtener el PID. Con el PID, puede intentarreptyr {PID}
oreptyr -T {PID}
(si hay subprocesos) continuar el trabajo.fuente