Faire une copie sécurisée et rapide d'un serveur à un autre simplement avec rsync et ssh
Par Mickael Fradin le jeudi, décembre 4 2008, 13:02 - Serveur - Lien permanent
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à !