RSYNC --Synchronisation sans mot de passe
RSYNC --Synchronisation sans mot de passe jmvSynchronisation sans mot de passe
Comme on a pu le remarquer, chaque fois qu’on synchronise d’un ordinateur à l’autre, on se fait demander un mot de passe. Si l’on veut éviter de se faire demander le mot de passe à chaque exécution de la commande rsync, il faut recourir au fichier /etc/rsync.conf sur l’ordinateur source, qui, en quelque sorte, donne la permission à l’autre ordi de faire la synchronisation sans mot de passe. Cela peut également être pratique dans le cas de synchronisations à intervalles réguliers, comme on le verra plus loin.
Le contenu du fichier rsync.conf n’est pas très différent d’une distribution à l’autre. Certains offrent des commentaires ou des instructions de base, d’autres pas (mon serveur de courriel Ubuntu à Toronto, par exemple). Voici un fichier de base de Gentoo, la distribution que j’utilise à la maison :
# /etc/rsyncd.conf # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script pid file = /run/rsyncd.pid use chroot = yes read only = yes
# Simple example for enabling your own local rsync server #[gentoo-portage] # path = /var/db/repos/gentoo # comment = Gentoo ebuild repository # exclude = /distfiles /packages
|
Et voici un extrait du fichier rsync.conf que j’utilise sur mon ordi principal (source) pour la synchronisation avec le serveur de fichier familial (destination) :
# /etc/rsyncd.conf # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help
# This line is required by the /etc/init.d/rsyncd script pid file = /run/rsyncd.pid use chroot = yes read only = yes log file = /var/log/rsync
# Simple example for enabling your own local rsync server #[gentoo-portage] # path = /var/db/repos/gentoo # comment = Gentoo ebuild repository # exclude = /distfiles /packages
# Autoriser la sauvegarde des répertoires banque, factures, # Antoine, Gabrielle et autres ############################################### (…) [gabrielle] path = /home/jmv/gabrielle comment = repertoire gabrielle uid = jmv gid = jmv
path = /home/jmv/antoine comment = repertoire antoine uid = jmv gid = jmv
path = /home/jmv/sauvegarde comment = repertoire sauvegarde qui se trouve sur le disque externe uid = jmv gid = jmv
|
Ceux qui ont l’oeil plus vif auront remarqué que j’ai ajouté la ligne « log file = /var/log/rsync » au fichier original, en plus des autres modules évidemment. Si jamais un problème de synchronisation survenait, j’aurai au moins une chance d’en retracer l’origine.
Le nom des modules est entre crochets […].
path = /chemin/du/répertoire/ou/du/fichier
comment = (facultatif)
uid = nom_de_l’utilisateur
gid = groupe_de_l’utilisateur
Les deux derniers éléments, uid et gid, permettent de conserver les permissions appartenant à l’utilisateur en question.
Donc, mon ordi principal (source) permet au serveur de fichiers familial (destination) de venir chercher les fichiers et répertoires à synchroniser et ce, sans mot de passe. La commande exécutée sur le serveur familial est la suivante pour le module [disque_externe] de mon ordi principal :
rsync -avh --delete 192.168.1.6::disque_externe /mnt/serveur/jmv/sauvegarde |
À noter que l’option « z » n’est pas utilisée étant donné que les deux ordis sont sur le réseau interne et que ça ne nuit pas à la bande passante. Si certains fichiers ont été modifiés sur le disque externe, ils remplaceront ceux qui existent déjà sur la cible, c’est-à-dire le serveur de fichiers. L’option --delete effacera sur la destination les fichiers et répertoires qui ne figurent plus sur le disque externe.
Mais en réalité, il y a sur le disque externe trois répertoires qui ne changent jamais et qui n’ont pas besoin d’être synchronisés à chaque fois. La commande est donc la suivante :
rsync -avh --exclude 'linux2' --exclude 'linux3' --exclude 'myth' --delete 192.168.1.6::disque_externe /mnt/serveur/jmv/sauvegarde |
Synchronisation à intervalles réguliers
Lorsqu’on veut procéder à une copie de sauvegarde automatisée de fichiers et de répertoires à intervalles réguliers, il est plus pratique de recourir à rsync avec le fichier rsync.conf et crontab, ce dernier permettant d’effectuer des tâches à des moments précis. Nous n’entrerons pas dans les détails de crontab, mais le petit tableau suivant donne une bonne idée de son utilisation :
# Exemple de définition d’une tâche à exécuter : # .---------------- minute (0 - 59) # | .------------- heure (0 - 23) # | | .---------- jour du mois (1 - 31) # | | | .------- mois (1 - 12) OU jan,feb,mar,apr ...(en anglais seulement) # | | | | .---- jour de la semaine (0 - 6) (dimanche=0 ou 7) OU sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * nom_d’utilisateur commande à exécuter |
À noter que si on laisse un astérisque (*) dans l’une des colonnes, cela signifie tous (toutes) les minutes, heures, jours, etc.
Pour revenir à l’exemple du disque externe de mon ordi principal, voici la commande que j’utilise dans crontab en tant que superutilisateur (crontab -e) :
7 0 * * * rsync -av --exclude 'linux2' --exclude 'linux3' --exclude 'myth' --delete 192.168.1.6::disque_externe /mnt/serveur/jmv/sauvegarde |
Explication : à minuit 7 minutes (7e minute de l’heure 0), tous les jours du mois, tous les mois et tous les jours de la semaine la commande s’exécute. Étant donné que mon disque externe est monté dans un répertoire appelé « sauvegarde », tous les fichiers et répertoires du disque en question sont sauvegardés dans un répertoire qui porte le même nom sur le serveur de fichier familial (/mnt/serveur/jmv/sauvegarde). De plus, comme il existe un fichier rsync.conf comprenant le module [disque_externe] sur l’ordinateur source, le serveur de fichiers destination n’a pas besoin de mot de passe pour accéder aux fichiers et répertoires de son vis-à-vis.
L’option « h » utilisée dans les précédentes commandes est devenue inutile puisque la commande s’exécute automatiquement et que personne ne « surveille » le déroulement de la synchronisation.
Conclusion
rsync est un outil très puissant et polyvalent. Il permet de faire la copie, la suppression et la synchronisation de fichiers et de répertoires localement et à distance, manuellement ou de manière automatisée. Avec une configuration adéquate, nul besoin d’un logiciel de sauvegarde!
Références :
Article de Techmint (en anglais) : https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/
Article de The Geek Stuff (en anglais) : https://www.thegeekstuff.com/2011/01/rsync-exclude-files-and-folders/
Page de manuel : http://www.delafond.org/traducmanfr/man/man1/rsync.1.html