Pré requis

Avoir rsync et ssh d'installé sur sa machine. Si c'est pas le cas installer les paquets suivants (cas d'une machine sous Debian ou Unbuntu) :

sudo apt-get install rsync
sudo apt-get install ssh

Pairage pour ne pas avoir a rentrer le mot de passe à chaque fois (optionnel)

Manipulation à faire avec les privilèges root (sudo -s) sur la machine locale: Dans mon cas on utilise un port spécial (222) pour ssh, il faut donc le spécifier dans la commande.

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub | ssh -p 222 root@monserveurdistant.fr "cat -  ~/.ssh/authorized_keys"

Mettez une passphrase vide si vous ne voulez pas saisir le mot de passe à chaque fois

Envoi des données ou récupération des données

Enfin on utilise rsync avec compression (-z) en mode verbeux (-v) et archive (-a) et on se connecte sur la machine sur le port spécial (222). Avec ces options rsync va faire la différence entre les deux répertoires et n'envoyer que les fichiers différent ce qui permet de gagner un temps énorme lorsque l'on veut synchroniser deux serveurs régulièrement. Rsync a le même fonctionnement que scp c'est à dire source à gauche et destination à droite, ainsi l'exemple suivant envoi les données sur le serveur distant.

rsync -avz -e 'ssh -p 222' --progress /var/www root@monserveurdistant.fr:/var/www

Mais on peut très bien faire l'inverse et récupérer les données du serveur distant en local

rsync -avz -e 'ssh -p 222' --progress root@monserveurdistant.fr:/var/www /var/www 

Synchronisation programmée avec CRON

Ça peut être pratique de faire ça tous les jours ou toutes les heures donc le plus simple c'est de rajouter une ligne CRON.

crontab -e

Et ajoutez pour une synchro tous les jours à 4h du matin

00 4 * * * rsync -avz -e 'ssh -p 222' --progress root@monserveurdistant.fr:/var/www /var/www

Et voilà !