Conexiones SSH de reconexión automática con una sesión específica de 'pantalla'

10

Normalmente tengo varias ventanas de terminal, cada una de las cuales está conectada a través de ssh a un servidor remoto. En cada ventana trabajo usando el programa de pantalla gnu, para asegurar la persistencia de los procesos interactivos en caso de desconexión.

Actualmente, cada vez que se corta la conexión ssh (como cuando pongo mi computadora cliente a dormir durante la noche) tengo que reiniciar manualmente y tediosamente la sesión ssh dentro de cada ventana, y luego en cada ventana reanudar tediosamente la sesión de pantalla específica (por ejemplo, "pantalla - r 3453 "en una ventana," screen -r 3462 "en la otra, etc.)

¿Hay una manera elegante de automatizar esto? Específicamente:

  • vuelva a conectar la sesión ssh si se cae, tan pronto como se detecte una conexión a Internet

  • ejecute la instancia de pantalla específica para la ventana de terminal tan pronto como ssh vuelva a conectarse

Gracias por cualquier consejo sobre esto

GJ
fuente

Respuestas:

10

Puede ejecutar esto: ssh -t hostname screen -r 3453para volver a conectar. Si desea hacerlo en un bucle, uso lo siguiente en un script.

while true; do
    ssh -t -o BatchMode=yes eeepc-rsi "screen -r 3453"
    sleep 2
done

Esto funciona mejor si tiene configurada ssh-keys para que pueda iniciar sesión sin escribir su contraseña. También te recomiendo que mires tmux, una implementación más moderna de pantalla. De hecho, uso el script anterior con pantalla. Probablemente también desee usar una sesión de pantalla con nombre en lugar de solo usar el pid como lo hace en su ejemplo.

Jason Axelson
fuente
¡Gracias! ¿Para qué es exactamente el "-o BatchMode = yes"?
GJ.
Le permitirá no solicitar la contraseña. De 'man ssh_config': "la consulta de frase de contraseña / contraseña se deshabilitará. Esta opción es útil en scripts y otros trabajos por lotes donde no hay ningún usuario presente para proporcionar la contraseña". Así que solo úselo si ya tiene configuradas las teclas ssh.
Jason Axelson
5

No es necesario hackear bash loops. Tienes que buscar en autossh . Yo no lo he usado mucho, pero entiendo que simplemente reemplazas sshcon autosshtu comando.

Editar: De hecho, autossh viene con un script llamado rscreenque parece estar diseñado exactamente para este propósito.

Ryan C. Thompson
fuente