it-swarm-es.com

Montaje SSHFS que sobrevive a la desconexión

Estoy usando SSHFS montajes de mi computadora portátil en un servidor central.

Obviamente, el montaje SSHFS se rompe después de una desconexión más larga (p. Ej., Durante la suspensión), ya que la conexión SSH subyacente se agotó.

¿Hay alguna manera de obtener monturas SSHFS que sobrevivan a desconexiones duraderas (> 5 min) o incluso una remarcación con una IP diferente?

60
bene

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:

sshfs -o reconnect server:/path/to/mount
54
bene

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 opción ServerAliveInterval se deja en el valor predeterminado (por lo tanto, sin la verificación activa), los procesos que experimentan bloqueo de E/S parecen quedar inactivos indefinidamente, incluso después de que sshfs obtiene reconnect 'ed. Considero que este es un comportamiento inútil.

En otras palabras, lo que sucede en -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 mayor.

Los ServerAliveCountMax=3 es el valor predeterminado de todos modos, pero me gusta especificarlo para facilitar la lectura.

65
kubanczyk

Autossh vuelve a conectar automáticamente las sesiones ssh cuando nota que ssh ha muerto o ha dejado de pasar tráfico. Dado que es solo ssh automatizado, funcionará desde diferentes IP y desde la suspensión (incluso si la computadora portátil se activa en un LAN diferente).

12
kband

Una cosa que podría hacer es montar sus sistemas de archivos a través de 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 howto Encontré en google para lograr esto, allí donde hay varios otros.

9
Zoredache

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 se quedaría colgado, y con el tiempo eso podría conducir a 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

Unmount /mnt/sshfs

en /etc/hibernate/common.conf.

2
David Z

El 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):

#!/bin/bash
echo PWD | sshfs [email protected]:/ MOUNT_PATH -o password_stdin,reconnect,ServerAliveInterval=15,ServerAliveCountMax=3 -p PORT -C -oStrictHostKeyChecking=no
if xhost >& /dev/null ; then
    pcmanfm MOUNT_PATH
fi
1
Timofey Bugaevsky