Synchro distante automatique via un daemon rsync sur Ubuntu
Par NiKo le jeudi 18 janvier 2007, 16:26 - Ubuntu
- Lien permanent -
13 commentaires -
Tags :
Et non ! Rsync n'est pas une voiture des années 90 mais bien un outil de synchronisation de fichiers à distance très puissant. Il peut notamment tourner en daemon afin d'autoriser les appels distants automatiques, via Cron par exemple.
Si par un hasard hallucinant vous ne disposiez pas de rsync sur votre Ubuntu, voici la démarche à suivre pour l'installer en ligne de commande :
$ sudo apt-get install rsync
Bien. Nous disposons de deux machines, la machine A - disposant d'un utilisateur jeanpierre - et la machine B - habitée par edmond. Nous devons automatiser la synchro d'un répertoire présent sur la machine A vers la machine B. On va donc installer un daemon rsync sur la machine A et le configurer en créant le fichier /etc/rsyncd.conf :
uid = jeanpierre gid = jeanpierre use chroot = no max connections = 4 syslog facility = local5 pid file = /var/run/rsyncd.pid [mon_partage] comment = Mon partage path = /home/jeanpierre/monpartage read only = yes list = yes hosts allow = * auth users = edmond, gerard secrets file = /etc/rsyncd.secrets
Je vous renvoie à cette page sur la syntaxe du fichier rsync.conf pour plus de renseignements.
On crée un fichier process vide :
jeanpierre@machineA:~$ sudo touch /var/run/rsyncd.pid
Les comptes utilisateurs se définissent dans le fichier /etc/rsyncd.secrets sous la traditionnelle forme login:motdepasse comme ci-dessous :
edmond:3dm0nd gerard:g3r4rd
Par souci de sécurité et de confidentialité, ces fichiers ne devront pas être lisibles par un autre utilisateur que le root, donc :
jeanpierre@machineA:~$ sudo chmod 640 /etc/rsyncd.conf jeanpierre@machineA:~$ sudo chmod 640 /etc/rsyncd.secrets
Lancer rsync en daemon sur la machine A (machinea.domain.tld) :
jeanpierre@machineA:~$ sudo rsync --daemon
Et depuis la machine B (machineb.domain.tld) :
edmond@machineB:~$ rsync -avz edmond@machinea.domain.tld::mon_partage ~/mon/repertoire/cible
La saisie du password de l'utilisateur edmond défini précedemment lancera la synchronisation effective des fichiers. Pour éviter la saisie manuelle du password, il faut envisager d'utiliser l'option --password-file=FILE. Pour se faire, il faut créer un fichier contenant juste le mot de passe en clair, par exemple dans /home/edmond/.rsync_passwd comme ceci :
3dm0nd
Ce fichier devra n'être accessible que par l'utilisateur système utilisant la commande rsync. Dans le cas de l'utilisateur connecté à la machine B :
edmond@machineB:~$ chmod 640 /home/edmond/.rsync_passwd
On peut alors lancer une synchro de cette façon :
edmond@machineB:~$ rsync -avz edmond@machinea.domain.tld::mon_partage ~/mon/repertoire/cible --password-file=/home/edmond/.rsync_passwd
L'avantage de cette ligne de commande est qu'elle peut être appellée depuis un Cron et donc ne pas nécessiter de saisie du mot de passe manuellement.
Enfin, sachez que les éventuelles erreurs d'authentification seront logguées dans le fichier /var/log/syslog.
13 commentaires (Ajouter un commentaire)
Hmm... Disons que je change régulièrement ma clé de connexion mais que ma clé privée n'est pas protégée par un mot de passe (par contre, seul le root peut lire la clé privée).
C'est un risque que je prends effectivement.
Du coup, je n'ai pas besoin de faire de ssh-add.
Voilà à quoi ressemble ma ligne de commande :
rsync -e "ssh -i /path/to/key/id_rsa" -avz --delete user@machineB:/path_to_backup /path_destination_on_machineA
Ca va synchroniser ma machineB sur ma machineA via une connexion ssh avec la clé /path/to/key/id_rsa
Comme je l'ai déjà dit, le prérequis au minimum est que cette clé ne soit lisible que par son propriétaire (il me semble que ssh-add ignore d'ailleurs les clés lisibles par d'autres utilisateurs).
Ca marche pas mal, çà me sert à faire des backups quotidiens en prod entre nos différents serveurs dédiés.
Klamouze> Oui, je connais cette manip' mais arrives-tu à faire un ssh-add au démarrage de la machine ? Ça m'interesse bigrement
Niko > Je lance rsync depuis ma machine A via un tâche cron. En ajoutant ma clé publique aux clés autorisées de la machine B (.ssh/authorized_keys), je permets à la machine A de se connecter à la machine B sans devoir saisir de mot de passe via ssh.
Niko> ba chez moi, root ou pas root, ça ne change rien ! Quand on fait un ls -la sur la machine B, les fichiers appartiennent toujours à edmon au lieu de jean-pierre... toi ça marche ?
Klamouze> Et comment fais-tu pour automatiser l'authentification sans intervention humaine ?
Fabien> Pour préserver le propriétaire, il faut lancer la synchro en root, car lui seul peut lire les fichiers de tous les utilisateurs du système ; peut-être est-ce là ton problème ?
super ! mais chez moi les permission ne sont pas respectées (les fichier de la machine A se retrouvent sur la machine B mais ont pour propriétaire edmon alors que c'est jean-pierre qui les a crées sur la machine A) est-ce seulement chez moi, où est ce que je dois me relire toute la doc pour comprendre ? (l'option -p pour soit disant préserver les permissions ne change rien)...
Ma synchro distante je la fais via ssh avec un accès avec la clé de ma machine A sur la machine B...
Je ne démarre pas de daemon, en fait la machine qui lance le rsync s'occupe de préparer la liste des fichiers et d'envoyer/recevoir la liste des fichiers...
Très bon billet, super intéressant ! Il manque juste peut être la façon de lancer automatiquement rsync en daemon au lancement de la machine. Encore merci pour ce billet
Encore un poste bien intéréssant. A noter qu'il est aussi possible d'authoriser un accès anonyme à un dossier rsync (à l'interieur d'un réseau local protégé par exemple...) si on ne précise pas les deux lignes :
auth users = edmond, gerard
secrets file = /etc/rsyncd.secrets
Merci pour l'article

Perso, j'utilise pas rsync, mais bon, je bookmark, ca peut toujours servir
Pour rsync, j'avais par contre pas pigé le jeu de mot! Car en effet, je le prononce "r-sink" ("in" comme dans ninja)

Merci NiCoS de m'avoir mis sur la piste
j'en peux plus de ce jeux de mot
Excellent billet pour le reste, que je vais mettre en place bientôt (depuis le temps que je me dis que je dois le faire...)
Voilà une mise en place bien plus complète que ce que je fais.
Je me contente d'habitude d'un simple rsync vers le disque dur externe... Une commande, et plus besoin de se préoccuper du reste.
La R5 c'est meme une voiture des années 70...;)