Accueil / Articles PiApplications. / Linux.

Synchronisation sécurisée de fichiers.

La pauvreté du système Windows impose souvent pour ce type de fonction l'acquisition de logiciels spécialisés comme l'excellentissime SynbackPro de 2brightsparks. Comme souvent, sous Linux tout est déjà en place mais encore faut-il savoir s'en servir...

Ce système met à notre disposition un véritable couteau Suisse pour la synchronisation de fichiers entre machines : la commande rsync (jetez un œil à la documentation de cette commande qui permet de faire du push ou du pull). La commande ssh permet, quant à elle, d'ouvrir un tunnel chiffré entre deux machines. L'emploi conjoint de ces deux commandes offre la possibilité de synchroniser les fichiers de manière sécurisée. Dans ce qui suit, nous allons voir une des multiples façons de procéder.

La première étape consiste à fixer les clefs de chiffrement sur les deux machines. Nous commençons par créer le clef via la commande ssh-keygen -f ~/.ssh/id_rsa -q -P ""Cette commande crée la clef et la chiffre sur la machine locale dans le répertoire de l'utilisateur connecté sous le nom de fichier ~/.ssh/id_rsa (on rappelle que le tilde (~) est une abréviation pour désigner le répertoire d'accueil du compte de l'utilisateur connecté). Il est possible de visualiser la clef privée via la commande more ~/.ssh/id_rsa. La commande more ~/.ssh/id_rsa.pub permet de visualiser la clef publique générée.

La seconde étape consiste à copier la clef publique sur la machine distante. Connectez vous via ssh à la machine distante puis tapez successivement les commandes :

mkdir ~/.ssh                              # Création du répertoire .ssh sur la machine distante
chmod 0700 ~/.ssh                         # Restriction des droits au seul utilisateur propriétaire du répertoire
touch ~/.ssh/authorized_keys              # Création du fichier (vide) de destination de la clef publique
chmod 0644 ~/.ssh/authorized_keys         # Restriction des droit en lecture à tous. Seul l'utilisateur aura le droit en écriture.

Relancez la commande more ~/.ssh/id_rsa.pub et copiez dans le presse-papiers son résultat. Avec votre éditeur préféré (vi, joe, pico, nano, kate, gedit, etc.) copier le contenu du presse papier dans le fichier ~/.ssh/authorized_keys.

Nous pouvons alors utiliser la commande rsync pour effectuer notre synchronisation.

rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~ jm@limousin.piapplications.eu:/home/jm/provence

Dans cet exemple, nous synchronisons récursivement le répertoire de l'utilisateur connecté vers le répertoire /home/jm/provence de la machine limousin.piapplications.eu. Sur cette machine distante, le compte utilisé est jm.

Notez l'emploi de l'option -z qui effectue une transfert de données compressées économisant ainsi de la bande passante.

Il est dès lors assez facile de scripter la commande afin de l'exécuter au sein d'autres via un batch ou via le planificateur de tâches cron.

Une autre approche est d'utiliser la commande rsync comme un serveur avec l'option --daemon. Il est alors assez aisé de faire commander les transferts via la machine distante. Bref et encore une fois, cela vaut vraiment la peine de consacrer un peu de temps au man de cette commande.

Enfin, si vous êtes définitivement réfractaire à la ligne de commande, il existe un excellent logiciel s'appuyant sur la commande rsync au travers d'une interface graphique de qualité : CrashPlan. Ce logiciel est gratuit, seul l'emploi de leur cloud est payant mais dans ce dernier cas, il offre en plus un accès à vos fichiers via votre téléphone.

(c) PiApplications 2016