Rsync

De Bricosoft.

Ceci n'est pas rsync mais une R5 ;-) okay ->[]

rsync (remote synchronisation ou synchronisation à distance) permet de créer un miroir informatique d'un dossier sur un serveur distant. Les données en transit entre les serveurs sont minimes puisque seul la différence est envoyée.

Avec rsync, tous les fichiers dans dossier_source/ vont se trouver dans dossier_destination/ :

rsync dossier_source/ dossier_destination/

Entre deux machines, rsync sera employé à travers une transmission sécurisée (tunnel SSH par échange d'une clé) :

rsync -e ssh utilisateur_distant@serveur.principal.fr:dossier_source/ dossier_destination/local/
Attention : vous devez nettoyer vos *bashrc et *profile de tout affichage car cela entraine une erreur "protocol mismatch".


Pour vérifier, la sortie de cette commande ne doit rien afficher :

rsync -e ssh utilisateur_distant@serveur.principal.fr echo 2>/dev/null

Sommaire

[modifier] Premier exemple

Premier exemple, copie d'un dossier provenant du serveur principal depuis le serveur miroir (vous êtes sur le miroir ou backup et vous rapatriez vos données)

toto@miroir$ rsync -avz --delete -e ssh toto@serveur.principal.fr:/home/toto/www/ /home/toto/backup/
  • -a : mode archive équivalent à -rlptgoD (récursif, préserve les liens symboliques, les permissions, la date et heure, le propriétaire/groupe, ...)
  • -v : mode verbeux (rajoutez autant de 'v' pour plus d'informations)
  • -z : compression
  • --delete : efface sur la destination les fichiers n'existant plus sur la source (attention ça efface des trucs !)
  • -e ssh : le shell distant

[modifier] Connexion miroir -> principal sans mot-de-passe

Après cette phase de test vous allez donner la clé publique du serveur miroir sur le serveur principal pour une connexion sécurisé sans demande interactive de mot-de-passe, gênante en cas d'automatisation.

[modifier] Clé numérique SSH

Depuis le serveur miroir et si vous n'avez pas déjà une jeu de clé privée/publique, générez la paire de clé privée-publique sans saisir de passphrase.

toto@miroir$ mkdir /root/rsync
toto@miroir$ ssh-keygen -t dsa -b 2048
Generating public/private dsa key pair.
Enter file in which to save the key (/home/toto/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/toto/.ssh/id_dsa.
Your public key has been saved in /home/toto/.ssh/id_dsa.pub.
The key fingerprint is:
62:71:0c:bf:01:d7:b4:41:76:04:84:1f:4a:aa:f4:26 toto@miroir
Copiez ensuite la *clé publique* sur le serveur principal :
toto@miroir$ scp ~/.ssh/id_dsa.pub toto@serveur.principal.fr:/home/toto/

Maintenant sur le serveur principal, ajoutez la clé fraichement copiée dans la liste de clés ssh du compte utilisateur.

Si ~/.ssh/authorized_keys n'existe pas créez les.

toto@serveur.principal.fr:~$ cd ~/.ssh/
toto@serveur.principal.fr:~/.ssh$ cat ~/id_dsa.pub >> authorized_keys

Vérifiez que la commande passe bien depuis le serveur miroir :

toto@miroir$ rsync -avz -e ssh toto@serveur.principal.fr:/home/toto/www/ /home/toto/backup/

Attention aux droits sur le serveur principal, on empêche l'écriture au groupe et aux autres :

toto@serveur.principal.fr:~/.ssh$ chmod go-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys


[modifier] Avec un port différent

Avec un port différent du défaut (le 22) mettez ssh entre quotes avec le parametre du port (ici 1337) :

toto@miroir$ rsync -avz -e "ssh -p 1337" toto@serveur.principal.fr:/home/toto/www/ /home/toto/backup/

[modifier] Automatisation périodique

crontab est la commande pour inscrire le lancement périodique de la sauvegarde.

Récupérez le chemin absolu vers rsync :

toto@miroir$ which rsync
/usr/local/bin/rsync

Ajoutez la ligne de commande dans la crontab pour un lancement tous les deux jours à 4h00 par exemple :

toto@miroir$ crontab -e
0 4 */2 * * /usr/local/bin/rsync -avvvz --delete -e ssh toto@serveur.principal.fr:/home/toto/public_html/ /home/toto/sauvegarde/public_html/ >/dev/null 2>&1

Voilà, votre sauvegarde automatique est en place.

[modifier] Sécurité : restreindre qu'à la commande rsync

L'échange de la clé publique permet à l'utilisateur sur le miroir de lancer (en plus de rsync) n'importe quelle autre commande. C'est une faille de sécurité potentielle en cas de compromission du miroir, il nous faut donc n'autoriser que la commande rsync.

Sur le serveur principal, modifiez le fichier stockant les clés publiques pour indiquer la commande rsync :

toto@serveur.principal.fr:~$ vim ~/.ssh/authorized_keys

Ajoutez juste au début de la ligne de la clé publique du miroir :

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AB3NzaCc3M.....1cQ== toto@miroir

Refaites un essai rsync depuis le miroir pour contrôler qu'il n'y ait pas d'erreur :

toto@miroir$ rsync -avz --delete -e ssh toto@serveur.principal.fr:/home/toto/www/ /home/toto/backup/

Revenez sur le serveur principal et rajoutez alors cette ligne de commande juste au début de la ligne de la clé publique du miroir.

toto@serveur.principal.fr:~$ vim ~/.ssh/authorized_keys
command="toto@miroir$ rsync -avz --delete -e ssh toto@serveur.principal.fr:/home/toto/www/ /home/toto/backup/" no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AB3NzaCc3M.....1cQ== toto@miroir

[modifier] Dépannage

  • L'erreur la plus commune concerne les droits sur le serveur principal :
toto@serveur.principal.fr:~/.ssh$ chmod go-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys
  • La version de rsync entre les deux machines doit être identique
rsync --version
  • Verifiez lors d'un simple login ssh que rien ne s'affiche comme fortune, un prompt trop verbeux ($PS1), etc

[modifier] Exemples

[modifier] Exclure le dossier "PLOP"

Le dossier et son contenu sera ignoré :

rsync -arvz --exclude=PLOP -e "ssh -p 666" ~/dossier_local_source/ utilisateur_distant@serveur.principal.fr:dossier_cible/

[modifier] Alias dans ~/.bash_aliases

alias sync-serveur-vers-ici='rsync -arvz --delete-after -e ssh utilisateur_distant@serveur.principal.fr:dossier_source/ ~/dossier_local_cible/'
alias sync-ici-vers-serveur='rsync -arvz --delete-after -e ssh ~/dossier_local_source/ utilisateur_distant@serveur.principal.fr:dossier_cible/'

Avec un port différent de 22 mettez ssh entre simple quotes avec le parametre du port (ici 666) :

alias sync-serveur-vers-ici="rsync -arvz --delete-after -e 'ssh -p 666' utilisateur_distant@serveur.principal.fr:dossier_source/ ~/dossier_local_cible/"
alias sync-ici-vers-serveur="rsync -arvz --delete-after -e 'ssh -p 666' ~/dossier_local_source/ utilisateur_distant@serveur.principal.fr:dossier_cible/"

[modifier] Liens


Récupérée de « http://www.bricosoft.com/Rsync »
Plus