Utilizar -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
La combinación ServerAliveInterval=15,ServerAliveCountMax=3
hace que los errores de E / S salgan después de un minuto de interrupción de la red. Esto es importante pero en gran medida indocumentado. Si la ServerAliveInterval
opción se deja en el valor predeterminado (por lo tanto, sin la verificación activa), los procesos que experimentan bloqueo de E / S parecen permanecer inactivos indefinidamente, incluso después de que se edita el sshfs reconnect
. Considero que este es un comportamiento inútil.
En otras palabras, lo que sucede -o reconnect
sin asignar ServerAliveInterval
es que cualquier E / S tendrá éxito o bloqueará la aplicación indefinidamente si el ssh se vuelve a conectar debajo. Una aplicación típica queda completamente colgada como resultado. Si desea permitir que E / S devuelva un error y reanude la aplicación, necesita ServerAliveInterval=1
o más.
El ServerAliveCountMax=3
es el valor predeterminado de todos modos, pero me gusta especificarlo para facilitar la lectura.
man 5 ssh_config
para más detalles, pero lo esencial es que cada 15 segundos ssh enviará algo así como un ping de 'mantener vivo' cada 15 segundos para asegurarse de que las computadoras aún se respondan entre sí. Si fallan tres pings consecutivos (45 segundos), vuelva a conectar.ServerAliveCountMax=3
tiene un significado diferente. Si hay una falla, intentará reconectarse 3 veces más y luego se dará por vencido. En algún momento volver a intentarlo es inútil, pero eso depende de la aplicación. Por otra parte, creo que la página del manual podría ser más específica, hay diferentes formas de interpretar la forma en que está redactada en la OMI. FWIW mi problema específico desapareció después de cambiar a ProtonVPN. Creo que también vale la pena verificar la configuración de ssh en el cliente y el servidor, tienen opciones separadas, por lo que todo lo que realmente necesita es-o reconnect
Gracias por los consejos de autossh y autofs.
Sin embargo, para mi propósito directo, encontré una solución mucho más simple que no estaba bien documentada:
fuente
Autossh vuelve a conectar automáticamente las sesiones ssh cuando se da cuenta de que ssh ha muerto o ha dejado de pasar el tráfico. Dado que es solo ssh automatizado, funcionará desde diferentes IP y desde suspensión (incluso si la computadora portátil se activa en un LAN diferente).
fuente
Una cosa que podría hacer es montar sus sistemas de archivos mediante autofs . Autofs es una herramienta que montará un sistema de archivos cuando use algo en el directorio en el que se montará el sistema de archivos. Cuando detecta actividad, el sistema de archivos está montado. Cuando no sucede nada en el sistema de archivos, se desmonta.
Aquí hay un tutorial que encontré en Google para lograr esto, allí donde hay muchos otros.
fuente
Sospecho que no, porque incluso si puede configurar su cliente SSH para que no pierda la conexión, el servidor podría estar configurado para hacerlo después de un período específico de inactividad, y no podría anular eso. Incluso si pudiera, si nunca reanuda la conexión, el servidor quedaría colgado, y con el tiempo eso podría ocasionar una pérdida significativa de recursos del servidor.
Creo que una mejor técnica es desmontar el sistema de archivos antes de suspender su computadora y volver a montarla cuando la computadora se despierte nuevamente. El mecanismo para hacerlo puede depender exactamente de cómo suspendas tu computadora: uso el kernel de tuxonice y para hacer algo como esto tengo una directiva como
en
/etc/hibernate/common.conf
.fuente
La respuesta de kubanczyk es genial. Tuve un problema con la congelación de toda la interfaz debido a sshfs demasiado codiciosos, ahora para una conexión fácil iniciada por un script que se reconecta cuando se abre la computadora portátil y que no se congela cuando la conexión se vuelve más lenta, puede usar un script bash como ese (tal vez no muy seguro, pero conveniente para muchos proyectos web, por ejemplo):
fuente