risposta-alla-domanda-sullo-sviluppo-web-bd.com

Montatura SSHFS che sopravvive alla disconnessione

Sto usando SSHFS monta dal mio laptop a un server centrale.

Ovviamente, il montaggio SSHFS viene interrotto dopo una disconnessione più lunga (ad es. Durante la sospensione), causando il timeout della connessione SSH sottostante.

Esiste un modo per ottenere supporti SSHFS che sopravvivono a disconnessioni di lunga durata (> 5 min) o persino a una ricomposizione con un IP diverso?

60
bene

Grazie per i suggerimenti di autossh e autofs.

Tuttavia, per il mio scopo diretto ho trovato una soluzione molto più semplice che non è stata documentata così bene:

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

Uso -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3

La combinazione ServerAliveInterval=15,ServerAliveCountMax=3 fa apparire gli errori I/O dopo un minuto di interruzione della rete. Questo è importante ma ampiamente non documentato. Se l'opzione ServerAliveInterval viene lasciata sul valore predefinito (quindi senza il controllo attivo), i processi che sperimentano il blocco I/O sembrano dormire indefinitamente, anche dopo che sshfs ha ricevuto reconnect 'ed. Lo considero un comportamento inutile.

In altre parole, cosa succede su -o reconnect senza assegnare ServerAliveInterval è che qualsiasi I/O avrà esito positivo o bloccherà l'applicazione indefinitamente se l'ssh si riconnette al di sotto. Di conseguenza, un'applicazione tipica si blocca completamente. Se desideri consentire all'I/O di restituire un errore e riprendere l'applicazione, devi ServerAliveInterval=1 o superiore.

Il ServerAliveCountMax=3 è comunque l'impostazione predefinita, ma mi piace specificarlo per la leggibilità.

65
kubanczyk

Autossh riconnette automaticamente le sessioni ssh quando rileva che ssh è morto o ha smesso di passare il traffico. Dal momento che è solo automatizzato ssh, funzionerà da IP diversi e da sospendere (anche se il laptop si sveglia su una diversa lan).

12
kband

Una cosa che potresti fare è montare i tuoi filesystem via autofs . Autofs è uno strumento che monterà un filesystem quando si usa qualcosa nella directory su cui verrà montato il filesystem. Quando rileva attività viene montato il filesystem. Quando non succede nulla sul filesystem viene smontato.

Ecco un howto che ho trovato su Google per ottenere questo risultato, là dove molti altri.

9
Zoredache

Sospetto che non lo sia, perché anche se puoi configurare il tuo client SSH in modo che non lasci cadere la connessione, il server potrebbe essere configurato per farlo dopo un determinato periodo di inattività, e non saresti in grado di sovrascriverlo. Anche se tu potessi, se non riprendessi mai la connessione, il server rimarrebbe sospeso e, nel tempo, ciò potrebbe comportare un significativo spreco di risorse del server.

Una tecnica migliore, credo, è quella di smontare il filesystem prima di sospendere il computer e rimontarlo quando il computer si risveglia. Il meccanismo per farlo potrebbe dipendere esattamente da come sospendi il tuo computer: uso il kernel tuxonice e per fare qualcosa del genere ho una direttiva come

Unmount /mnt/sshfs

in /etc/hibernate/common.conf.

2
David Z

risposta di kubanczyk è eccezionale. Ho avuto un problema con il congelamento dell'intera interfaccia a causa di sshfs troppo avidi, ora per una facile connessione avviata da uno script che si riconnette quando il laptop viene aperto e che non si blocca quando la connessione diventa più lenta, puoi usare uno script bash come quello (forse non molto sicuro, ma conveniente per molti progetti web per esempio):

#!/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