rsync est un outil puissant permettant de synchroniser des arborescences, pas nécessairement sur la même machine. Il est généralement utilisé pour faire des sauvegardes, mais on peut aussi par exemple s’en servir pour mettre un site en ligne.

Il fait l’inventaire des fichiers dans les deux répertoires et ne recopie que les fichiers soit qui n’existent pas dans le répertoire cible, soit qui ont été modifiés depuis la dernière copie. Comme scp, rsync utilise un tunnel ssh lorsque l’un des deux répertoires (ou les deux) à synchroniser est distant.

Nous allons voir les bases de rsync et la façon dont on peut s’en servir pour faire des sauvegardes, nous allons voir ensuite comment il est possible d’automatiser cette tâche et de régler le problème du mot de passe (documentation)

Commande et options

Lorsque l’on souhaite sauvegarder une arborescence sur un répertoire distant, on procède de la sorte :

rsync --progress -avz repertoiresource/* login@hote:repertoirecible/

Détaillons les options et arguments de cette commande :

  • repertoiresource est le répertoire de votre disque dur dans lequel se trouve l’arborescence à sauvegarder
  • login est votre login sur la machine distante
  • hote est le nom d’hôte de la machine distante
  • repertoirecible est sur la machine le chemin vers le répertoire dans lequel vous souhaitez stocker les fichiers sauvegardés
  • –progress sert à afficher une jauge à chaque fois qu’un fichier est transféré
  • -avz : le v sert à activer la verbosité, le a précise que l’on utilise le mode « archive » (préservation des liens symboliques, des droits, etc.), z compresse les fichiers pendant le transfert.

Vous remarquerez que pour que tout cela fonctionne, vous devez saisir votre mot de passe…

A chaque fois que cette commande sera invoquée, le répertoire distant sera synchronisé avec le répertoire source. Comme seuls les fichiers nouveaux ou modifiés sont transférés, la synchronisation est très rapide. Vous noterez que contrairement à ce que le mot synchronisation laisse entendre, la sauvegarde ne se fait que depuis la source vers la cible. Si vous modifiez des fichiers dans le répertoire cible, ils ne seront jamais recopiés dans le répertoire source par rsync.

Le mot de passe

Le problème qui se pose lorsque vous lancez la sauvegarde est que systématiquement un mot de passe vous est demandé. Le caractère fastidieux de cette saisie peut, à la longue, s’avérer fort pénible. La solution qui a mes yeux semble la plus élégante est d’utiliser la cryptographie asymétrique.

Avant de lire la suite, vous devez accepter l’idée qu’il est impossible de passer le mot de passe en argument à rsync, il vous enverra promener systématiquement et je vous avoue qu’au niveau sécurité ça laisserait franchement à désirer.

Pour commencer vous devez créer un couple de clés RSA, l’une des clés est la clé publique et l’autre la clé privée. La clé privée va vous servir à signer électroniquement un document, et la clé publique servira à vérifier que la signature est correcte. Vous devez donc mettre sur le serveur distant votre clé publique et conserver sur votre disque dur votre clé privée. A chaque tentative de connexion, le serveur va vous envoyer une donnée qui sera automatiquement signée à l’aide de votre clé privée, puis retournée au serveur. Le serveur va ensuite utiliser votre clé publique pour s’assurer que la signature est correcte. Si c’est le cas, la demande de connexion sera acceptée, sinon elle sera refusée.

Cela signifie que vous n’aurez plus jamais besoin de saisir de votre mot de passe lorsque, depuis une machine disposant de votre clé publique, vous vous connecterez en ssh (ou avec une commande utilisant ssh, par exemple scp et rsync).

Vous devrez donc :

  • Générer un couple de clés RSA
  • Recopier votre clé publique sur le serveur

Je me suis librement inspiré cette page.

Génération d’un couple de clés

On génère un couple de clés avec la commande ssh-keygen :

ssh-keygen -t rsa

Vous pouvez conserver toutes les options par défaut. Une fois l’exécution de cette commande terminée, deux fichiers id_rsa et id_rsa.pub sont crées dans le repértoire $HOME/.ssh/. id_rsa.pub est votre clé publique et id_rsa est votre clé privée.

Envoi de la clé publique sur le serveur

Il suffit d’utiliser la commande scp pour envoyer id_rsa.pub sur le serveur ssh. On procède de la façon suivante :

scp $HOME/.ssh/id_rsa.pub login@hote:.ssh/authorized_keys

login est votre login sur la machine distante, et hote est le hostname de la machine distante. Et pour la dernière fois, vous devrez saisir votre mot de passe !Il ne faudra pas oublier de gérer les droits du fichier $HOME/.ssh/authorized_keys en le mettant en 700 :

ssh login@hote "chmod 700 .ssh/authorized_keys"