Montages SSH avec ubuntu 11

À partir de la version 11.04, l’utilisation des montages smb devient galère, voire quasiment impossible (je n’ai pas réussi à faire quoi que ce soit depuis que j’ai réinstallé mon PC).

On peut se tourner vers FUSE, qui est prévu pour faire des montages à partir d’un login utilisateur. FUSE n’étant qu’une couche de base, il faut rajouter des outils complémentaires pour faire les montages.

Actuellement, il existe deux outils :

-

fusesmb, qui permet de retrouver une arborescence SAMBA du réseau. Le moins que l’on puisse dire, c’est que c’est peu performant, quand ça fonctionne...

-

sshfs, qui permet de réaliser des montages ssh. Pratique si vous avez des serveurs Linux et, après plusieurs semaines d’utilisation, c’est très stable.

Utiliser sshfs pour créer des montages

L’identification peut être réalisée soit par mot de passe, soit par utilisation d’un certificat numérique.

Identification par mot de passe

Préparation du serveur

Vérifiez que vous avez installé les paquets adéquats :

ldap-auth-client
ldap-auth-config
ldap-utils                      
libaprutil1-ldap
libldap-2.4-2              
libnss-ldap
libpam-ldap

Configurez également correctement d’une part le fichier /etc/ldap.conf :

base ou=agriculture,o=gouv,c=fr
uri ldaps://monserveur.com
ldap_version 3
pam_password md5
nss_base_passwd        ou=People,ou=agriculture,o=gouv,c=fr?one
nss_base_shadow        ou=People,ou=agriculture,o=gouv,c=fr?one
nss_base_group                ou=Group,ou=agriculture,o=gouv,c=fr?one
nss_base_hosts                ou=Hosts,ou=agriculture,o=gouv,c=fr?one
ssl start_tls
ssl on
tls_checkpeer yes
tls_cacertfile /etc/ssl/certs/igca-racine-serveur.crt

et le fichier /etc/nsswitch.conf :

passwd:         files ldap
group:          files ldap
shadow:         files ldap

Il faut que votre serveur soit en mesure d’accepter les connexions ssh de la part des utilisateurs. Vous devrez donc modifier les fichiers pam.

common-account :
# here are the per-package modules (the "Primary" block)
account        [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so 
account        [success=1 default=ignore]        pam_ldap.so
common-password :
# here are the per-package modules (the "Primary" block)
password        [success=2 default=ignore]        pam_unix.so obscure sha512
password        [success=1 user_unknown=ignore default=die]        pam_ldap.so use_authtok try_first_pass
common-session :
# and here are more per-package modules (the "Additional" block)
session        required        pam_unix.so 
session        optional                        pam_ldap.so 
session        optional                        pam_ck_connector.so nox11
# end of pam-auth-update config
common-auth :
# here are the per-package modules (the "Primary" block)
auth        [success=2 default=ignore]        pam_unix.so nullok_secure
auth        [success=1 default=ignore]        pam_ldap.so use_first_pass

Script de connexion

Ce script permet de saisir le mot de passe, et de l’utiliser pour les connexions SSH sans avoir à le retaper à chaque montage :

cd ~
LOGIN=eric.quinton
RACINE=~/mnt
#read -s -p "mot de passe : " mdp
echo "Montages en cours..."
mkdir -p $RACINE/serveur1/donnees
mkdir -p $RACINE/serveur2/eric.quinton
mkdir -p $RACINE/serveur3/www
echo $mdp|sshfs $LOGIN@serveur1:/home/eric.quinton $RACINE/serveur1/eric.quinton -o password_stdin,allow_other
echo $mdp|sshfs $LOGIN@serveur2:/opt/donnees $RACINE/serveur2/donnees -o password_stdin,allow_other
echo $mdp|sshfs $LOGIN@serveur3:/var/www $RACINE/serveur3/www -o password_stdin

Identification par certificat

Vous avez également la possibilité d’utiliser votre certificat numérique pour vous identifier. Pour cela, dans le serveur cible, dans le dossier /home/login/.ssh, créez un fichier authorized_keys et copiez-y votre clé publique.

Votre clé privée doit être dans votre dossier /.ssh/, et porter le nom id_rsa (ou id_dsa si vous avez généré une clé dsa). Assurez-vous d’avoir protégé votre clé privée avec un mot de passe non trivial !

Script de connexion

cd ~
LOGIN=eric.quinton
RACINE=~/mnt
#read -s -p "mot de passe : " mdp
echo "Montages en cours..."
mkdir -p $RACINE/serveur1/donnees
mkdir -p $RACINE/serveur2/eric.quinton
mkdir -p $RACINE/serveur3/www
sshfs $LOGIN@serveur1:/home/eric.quinton $RACINE/serveur1/eric.quinton -o allow_other
sshfs $LOGIN@serveur2:/opt/donnees $RACINE/serveur2/donnees -o allow_other
sshfs $LOGIN@serveur3:/var/www $RACINE/serveur3/www -o allow_other

Démontage des lecteurs

Voici un script qui vous permettra de démonter vos lecteurs à la fermeture de la session graphique :

/usr/local/bin/demontage.sh
#!/bin/bash
for montage in $(mount -l -t fuse.sshfs|grep $USERNAME|sed s/^.*\ on\ //|sed s/type.*$//)
do
        fusermount -u $montage
done

et pour qu’il soit exécuté à la fermeture de la session graphique :

/etc/gdm/PostSession/Default 
#!/bin/sh
/usr/local/bin/demontage.sh
exit 0