Rsync Tutorial · 7 min read · Dec 13, 2025
Miroiter votre site Web avec rsync

Ce tutoriel montre comment vous pouvez miroiter votre site Web de votre serveur Web principal vers un serveur de sauvegarde qui peut prendre le relais si le serveur principal échoue. Nous utilisons l’outil rsync pour cela, et nous le faisons fonctionner via un job cron qui vérifie toutes les x minutes s’il y a quelque chose à mettre à jour sur le miroir. Ainsi, votre serveur de sauvegarde devrait généralement être à jour s’il doit prendre le relais.
rsync met à jour uniquement les fichiers qui ont changé, donc vous n’avez pas besoin de transférer 5 Go de données chaque fois que vous exécutez rsync. Il ne miroite que les fichiers nouveaux/changés, et il peut également supprimer des fichiers du miroir qui ont été supprimés sur le serveur principal. De plus, il peut préserver les permissions et les propriétaires des fichiers et répertoires miroités ; pour préserver les propriétaires, nous devons exécuter rsync en tant que root, ce que nous faisons ici. Si les permissions et/ou les propriétaires changent sur le serveur principal, rsync les changera également sur le serveur de sauvegarde.
Dans ce tutoriel, nous allons tunneliser rsync via SSH, ce qui est plus sécurisé ; cela signifie également que vous n’avez pas besoin d’ouvrir un autre port dans votre pare-feu pour rsync - il suffit que le port 22 (SSH) soit ouvert. Le problème est que SSH nécessite un mot de passe pour se connecter, ce qui n’est pas bon si vous souhaitez exécuter rsync en tant que job cron. Le besoin d’un mot de passe nécessite une interaction humaine, ce qui n’est pas ce que nous voulons.
Mais heureusement, il existe une solution : l’utilisation de clés publiques. Nous créons une paire de clés (sur notre serveur de sauvegarde mirror.example.com), dont l’une est enregistrée dans un fichier sur le système distant (server1.example.com). Par la suite, nous ne serons plus invités à entrer un mot de passe lorsque nous exécutons rsync. Cela inclut également les jobs cron, ce qui est exactement ce que nous voulons.
Comme vous l’avez peut-être déjà deviné d’après ce que j’ai écrit jusqu’à présent, le concept est que nous initions le mirroring de server1.example.com directement depuis mirror.example.com ; server1.example.com n’a rien à faire pour être miroité.
J’utiliserai la configuration suivante ici :
- Serveur principal : server1.example.com (server1) - Adresse IP : 192.168.0.100
- Serveur miroir/de sauvegarde : mirror.example.com (mirror) - Adresse IP : 192.168.0.175
- Le site Web à miroiter se trouve dans /var/www sur server1.example.com.
rsync est uniquement destiné à miroiter des fichiers et des répertoires ; si vous souhaitez miroiter votre base de données MySQL, utilisez plutôt la réplication/miroir MySQL.
Je tiens à dire d’abord que ce n’est pas le seul moyen de configurer un tel système. Il existe de nombreuses façons d’atteindre cet objectif, mais c’est la méthode que je vais suivre.
La première étape consiste à se connecter ou à devenir l’utilisateur root sur votre système. Sur Debian et centOS, utilisez :
su -Si vous êtes connecté en tant qu’utilisateur différent de root. Sur Ubuntu, utilisez :
sudo -sà la place.
1 Installer rsync
Tout d’abord, nous devons installer rsync sur server1.example.com et mirror.example.com. Pour les systèmes Debian et Ubuntu, cela ressemble à ceci :
server1/mirror :
(Nous faisons cela en tant que root !)
apt install rsyncSur d’autres distributions Linux, vous utiliseriez yum / dnf (Fedora/CentOS) ou yast (SuSE) pour installer rsync.
Sur CentOS / Rocky Linux ou AlmaLinux, utilisez :
dnf install rsync2 Créer un utilisateur non privilégié sur server1.example.com
Maintenant, nous créons un utilisateur non privilégié appelé someuser sur server1.example.com qui sera utilisé par rsync sur mirror.example.com pour miroiter le répertoire /var/www (bien sûr, someuser doit avoir des permissions de lecture sur /var/www sur server1.example.com).
server1 :
(Nous faisons cela en tant que root !)
sudo useradd -d /home/someuser -m -s /bin/bash someuserCela créera l’utilisateur someuser avec le répertoire personnel /home/someuser et le shell de connexion /bin/bash (il est important que someuser ait un shell de connexion valide - quelque chose comme /bin/false ne fonctionne pas !). Maintenant, donnez un mot de passe à someuser :
passwd someuser3 Tester rsync
Ensuite, nous testons rsync sur mirror.example.com. En tant que root, nous faisons cela :
mirror :
rsync -avz -e ssh [email protected]:/var/www/ /var/www/Vous devriez voir quelque chose comme ceci. Répondez par oui :
L'authenticité de l'hôte 'server1.example.com (192.168.0.100)' ne peut pas être établie.
L'empreinte de la clé RSA est 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Êtes-vous sûr de vouloir continuer à vous connecter (oui/non) ?<-- ouiEnsuite, entrez le mot de passe de someuser, et vous devriez voir que le répertoire /var/www de server1.example.com est miroité vers /var/www sur mirror.example.com.
Vous pouvez vérifier cela comme ceci sur les deux serveurs :
server1/mirror :
ls -la /var/wwwVous devriez voir que tous les fichiers et répertoires ont été miroités vers mirror.example.com, et les fichiers et répertoires devraient avoir les mêmes permissions/propriétaires que sur server1.example.com.
4 Créer les clés sur mirror.example.com
Maintenant, nous créons la paire de clés privée/publique sur mirror.example.com :
mirror :
(Nous faisons cela en tant que root !)
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-keyVous verrez quelque chose comme ceci :
Génération de la paire de clés dsa publique/privée.
Entrez la phrase secrète (vide pour aucune phrase secrète) : [appuyez sur entrer ici]
Entrez à nouveau la même phrase secrète : [appuyez sur entrer ici]
Votre identification a été enregistrée dans /root/cron/mirror-rsync-key.
Votre clé publique a été enregistrée dans /root/cron/mirror-rsync-key.pub.
L'empreinte de la clé est :
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirrorIl est important de ne pas entrer de phrase secrète sinon, le mirroring ne fonctionnera pas sans interaction humaine, donc appuyez simplement sur entrer !
Ensuite, nous copions notre clé publique vers server1.example.com :
mirror :
(Encore une fois, nous faisons cela en tant que root.)
scp /root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/La clé publique mirror-rsync-key.pub devrait maintenant être disponible dans /home/someuser sur server1.example.com.
5 Configurer server1.example.com
Maintenant, connectez-vous via SSH sur server1.example.com en tant que someuser (pas root !) et faites ceci :
server1 :
(Veuillez faire cela en tant que someuser !)
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keysEn faisant cela, nous avons ajouté le contenu de mirror-rsync-key.pub au fichier /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys devrait ressembler à ceci :
server1 :
(Toujours en tant que someuser !)
vi /home/someuser/.ssh/authorized_keysssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorMaintenant, nous voulons autoriser les connexions uniquement depuis mirror.example.com, et l’utilisateur se connectant ne devrait être autorisé à utiliser que rsync, donc nous ajoutons
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-ptyjuste au début de /home/someuser/.ssh/authorized_keys :
server1 :
(Toujours en tant que someuser !)
vi /home/someuser/.ssh/authorized_keyscommand="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom root@
mirrorVous devez utiliser un FQDN comme mirror.example.com au lieu d’une adresse IP après from=, sinon, le mirroring automatisé ne fonctionnera pas !
Maintenant, nous créons le script /home/someuser/rsync/checkrsync qui rejette toutes les commandes sauf rsync.
server1 :
(Nous faisons toujours cela en tant que someuser !)
mkdir ~/rsync
vi ~/rsync/checkrsync#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
*
*)
echo "Rejeté"
;;
*
(*)
echo "Rejeté"
;;
*
{*)
echo "Rejeté"
;;
*
;*)
echo "Rejeté"
;;
*
<*)
echo "Rejeté"
;;
*
`*)
echo "Rejeté"
;;
rsync
--server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejeté"
;;
esacchmod 700 ~/rsync/checkrsync6 Tester rsync sur mirror.example.com
Maintenant, nous devons tester sur mirror.example.com si nous pouvons miroiter server1.example.com sans être invités à entrer le mot de passe de someuser. Nous faisons cela :
mirror :
(Nous faisons cela en tant que root !)
rsync -avz --delete --exclude=/stats --exclude=/error --exclude=/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/(L’option –delete signifie que les fichiers qui ont été supprimés sur server1.example.com doivent également être supprimés sur mirror.example.com. L’option –exclude signifie que ces fichiers/répertoires ne doivent pas être miroités ; par exemple, –exclude=/error signifie “ne pas miroiter /var/www/error”. Vous pouvez utiliser plusieurs options –exclude. J’ai listé ces options comme exemples ; vous pouvez ajuster la commande selon vos besoins. Consultez
man rsyncpour plus d’informations.)
Vous devriez maintenant voir que le mirroring a lieu :
receiving file list ... done
sent 71 bytes received 643 bytes 476.00 bytes/sec
total size is 64657 speedup is 90.56sans être invité à entrer un mot de passe ! C’est ce que nous voulions.
7 Créer un job cron
Nous voulons automatiser le mirroring, c’est pourquoi nous créons un job cron pour cela sur mirror.example.com. Exécutez crontab -e en tant que root :
mirror :
(Nous faisons cela en tant que root !)
crontab -eet créez un job cron comme ceci :
*/5 * * * * /usr/bin/rsync -azq --delete --exclude=/stats --exclude=/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/ Cela exécuterait rsync toutes les 5 minutes ; ajustez-le selon vos besoins (voir
man 5 crontab). J’utilise le chemin complet vers rsync ici (/usr/bin/rsync) juste pour être sûr que cron sait où trouver rsync. L’emplacement de votre rsync peut différer. Exécutez
mirror :
(Nous faisons cela en tant que root !)
which rsyncpour découvrir où se trouve le vôtre.
8 Liens
- rsync: https://rsync.samba.org/
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.