Monter un répertoir ssh sans coupure

Publié le 20/07/2010

Je travaille souvent sur mon serveur (Linux évidemment) et j’ai tendance à vouloir transférer des fichiers ou en récupérer… Vous allez me dire “ouais, scp en ligne de commande ou encore sftp:// dans le navigateur de fichier nautilus… mais il existe une meilleure méthode pour avoir accès à son serveur: faire un point de montage fuse.

Avant d’attaquer, il faut savoir qu’un souci peut apparaître avec SSH si la connexion est inactive. En fait, quelque soit la manière dont vous vous connectez à votre serveur, si la connexion est inactive durant quelques minutes vous allez avoir une coupure. Cela implique: -terminal coincé ou message d’erreur -montage gvfs gnome coincé (donc nautilus dans les choux) -montage fuse coincé (et pareil, nautilus ou accès qui coince)

La solution au problème se trouve soit dans le fichier de configuration du serveur, soit dans celui du client.

Dans le premier cas, ouvrez le fichier /etc/ssh/sshd_config (sur le serveur) et trouvez ou ajouter la ligne qui contient: ClientAliveInterval. Si elle commence par un dièse (#) vous enlevez ce fameux dièse et changez la valeur numérique à 30 ou 45.

Cela va faire en sorte que le serveur envoit un paquet vide au client si ce dernier a été inactif durant plus de 30 ou 45 secondes.

  • - Vous devez redémarrer le serveur ssh** pour qu’il prennent en compte cette modification, faites simplement depuis le client:
ssh root@votre-serveur /etc/init.d/sshd restart

Attendez un moment, disons 5-6 secondes et relancez vos sessions ssh. C’est ok.

Si vous préférez toucher le fichier client, c’est facile. Ouvrez (sur votre poste ce coup ci) le fichier /etc/ssh/ssh_config (remarquez qu’il n’y a plus le “d” après ssh). Trouvez maintenant la ligne qui contient ServerAliveInterval. Si elle n’y est pas, ajoutez la. Comme précédemment le client va tenter d’envoyer un paquet vide toutes les N secondes. Exemple:

Host *
  #blablabla plein de config
  ServerAliveInterval 30

Désormais, il ne vous reste plus qu’à redémarrer votre session ssh (pour prendre les nouveaux paramètres) et vous n’aurez plus de soucis de déconnexion de serveur.

Si vous le désirez, avant de monter notre disque fuse, nous allons créer des clefs pour ne plus avoir à utiliser notre mot de passe. Si vous avez un fichier ~/.ssh/id_rsa.pub alors passez au paragraphe suivant, sinon:

ssh-keygen -t rsa -b 1024

Si vous le désirez, ne tapez pas de mot de passe (passphrase)… ok c’est moins “secure” mais faut pas non plus croire que ça ouvre des portes… bref, je ne m’étale pas sur le sujet, sachez que ça ne risque pas tant que ça…

Envoyons maintenant notre clef sur le serveur:

ssh-copy-id user-server@votre-serveur

On va vous demander le mot de passe du serveur pour “user-server” (ça peut être “root”)… puis c’est terminé ! Maintenant, si vous tentez cette commande:

ssh user-server@votre-server uname -a

cela va vous sortir des infos du serveur sans vous demander de mot de passe.

Passons maintenant au montage de disque fuse SSH.

En premier, installez “fuse” sur votre machine…

#fedora
su -lc "yum -y install fuse fuse-sshfs"

#ubuntu
sudo aptitude install fuse sshfs

Voilà qui est fait. On va maintenant imaginez cette situation: -vous avez un serveur “votre-server” dont un répertoire /home/server-user existe

Voici ce qu’il faut faire: -créer sur votre poste un répertoire -monter le répertoire du serveur sur le répertoire créé

Facile!

mkdir ~/rep-de-mon-user
sshfs server-user@votre-server:/home/server-user ~/rep-de-mon-user

Et c’est tout ! Le point de montage se fait ! la preuve:

mount
server-user@votre-server:/home/votre-server on /home/<votreuser>/rep-de-mon-user type fuse.sshfs (rw,nosuid,nodev,max_read=65536,user=<votre-user>)

Génial non ? Et si on le mettait maintenant dans notre fstab pour le monter tout le temps au démarrage de la machine ?

Allez, en root (ou avec sudo sur ubuntu) (**remplacez par votre login local**)

echo "server-user@votre-server:/home/votre-server     /home/<votre-user>/rep-de-mon-user fuse.sshfs rw,nosuid,nodev,max_read=65536,user=<votre-user> 0 0" >> /etc/fstab 

Maintenant, rien de plus simple… au démarrage le point de montage se fera, sinon vous pouvez monter le répertoire de cette manière:

mount /home/<votre-user>/rep-de-mon-user

et le démonter:

umount /home/<votre-user>/rep-de-mon-user

C’est franchement sympa je trouve… non ?

comments powered by Disqus