Utiliser rsync (+ ssh et sudo) pour copier facilement vos données

Rédigé par citizenz - - 13 commentaires

​Imaginons : vous avez plusieurs centaines de fichiers et des répertoires entiers à rapatrier depuis votre anciens serveur vers votre nouveau serveur. Pour aller plus vite, l'outil idéal, c'est rsync.

Le wiki Ubuntu nous dit :

rsync (pour remote synchronization ou synchronisation à distance), est un logiciel de synchronisation de fichiers.
Il est fréquemment utilisé pour mettre en place des systèmes de sauvegarde distante.
rsync travaille de manière unidirectionnelle c'est-à-dire qu'il synchronise, copie ou actualise les données d'une source (locale ou distante) vers une destination (locale ou distante) en ne transférant que les octets des fichiers qui ont été modifiés.

Mettons tout cela en place sur notre Debian :
sudo apt install rsync

Il vous faut également ssh (sudo apt install ssh).

Voici un exemple assez complet de rsync :
rsync -av --progress --delete --stats --human-readable -e 'ssh -p xxxx' user@serveurdistant.fr:/home/user/* /home/user/

-a : c'est l'option de la "mort-qui-tue". En fait ça fait tout (ou presque). C'est un moyen rapide de dire que vous voulez la récursivité et préserver pratiquement tout. C'est équivalent aux optissn combinées -rlptgoD.
-v : verbeux
--progress : vous indique la progression de la copie/transfert
--stats : affichage de stats sur le transfert des fichiers
--human-readable : lecture "humaine" des chiffres. Idem à l'option ls -h (transforme en KO, MO, GB, ...)
- e : spécifie un shell distant

Il existe une autre option bien pratique :

 --delete : cette option demande à rsync d'effacer tous les fichiers superflus côté réception (ceux qui ne sont pas du côté envoi); uniquement pour les répertoires synchronisés. Attention toutefois à l'utilser correctement ...

Vous avez "la totale" des options rsync ici :

http://www.delafond.org/traducmanfr/man/man1/rsync.1.html

Résultat ?

Avec la commande utilisée plus haut, une fois rentré le mot de passe de l'utilisateur distant (en ayant précisé un éventuel port ssh au cas où le serveur ssh ne tournerait pas sur le traditionnel port 22), rsync va "copier" tous les fichiers du répertoire /home/user (/home/user/*) depuis le serveur distant VERS votre nouveau serveur dans le répertoire /home/user.

Il peut arriver que certains répertoires ou fichiers ne puissent être récupérés pour des questions de droits. Il va alors falloir, sur le serveur distant, configurer sudo

Sur le serveur distant, si sudo n'est pas installé :
sudo apt install sudo 

Il faut configurer sudo :
sudo visudo

Nous allons rajouter dans le fichier la ligne suivante (où vous voulez) :
user ALL= NOPASSWD:/usr/bin/rsync 

Evidemment, changez "user" par votre véritable nom/pseudo... C'est le truc con qui arrive quand on fait des copier/coller. Je dis ça, car je suis le roi du "Ca marche pas... pourquoi ... Oh M.... ! J'ai pas changé user / mondomaine.com !"

Puis on va utiliser l'option "--rsync-path" pour préciser à rsync de démarrer avec l'option sudo :
rsync -av --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p xxxx" useronremoteserver@remoteserver:/data/to/sync /archive/data/

Et hop, là, plus de soucis on récupère tous les répertoires et fichiers.

CitizenZ : Geek quadra nivernais
fan d'ovalie, de musique, de linuxeries et de Net !

À lire également

13 commentaires

#1  - Sabcat a dit :

sudo apt install sudo ???

Répondre
#2  - citizenz a dit :

Oui cool

Répondre
#3  - Thomas a dit :

Je te suggère l'option -A qui permet de conserver les droits acls. smile

Répondre
#4  - citizenz a dit :

@Thomas merci

Répondre
#5  - Corto a dit :

Merci ! J'ai juste pataugé un peu pour trouver le path de mes fichiers chez mon hébergeur, mais ça marche très bien, depuis l'ancien et vers le nouveau serveur.

Répondre
#6  - bem a dit :

Bonjour,

Merci pour cet article instructif.

PS. Il faudrait ajouter le "i" manquant à "Utiliser" dans le titre (plus c'est écrit en gros moins on voit ce genre de coquille.)

Répondre
#7  - citizenz7 a dit :

Merci à toi Bem. Corrigé ! wink cool

Répondre
#8  - Nicolas a dit :

Bonjour,
Merci pour cet article. Je souhaite copier des fichiers/dossiers d'un serveur A vers un serveur B. Avant de faire une bêtise, j'ai 3 questions :
- La ligne user ALL= NOPASSWD:/usr/bin/rsync est à ajouter sur quel serveur (A ou B) ?
- La commande rsync -av --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p xxxx" useronremoteserver@remoteserver:/data/to/sync /archive/data/ est à exécuter sur quel serveur (A ou B) ?
- Y a-t-il un moyen de ne pas à avoir à entrer la passphrase pour une clé SSH afin d'automatiser cette copie ?
Merci !

Répondre
#9  - citizenz7 a dit :

@Nicolas :
- la ligne user ALL= NOPASSWD:/usr/bin/rsync est à rentrer sur le serveur de backup, celui qui va recevoir les fichiers "en copie"
- rsync -av --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p xxxx" : idem. Tout se passe depuis le serveur de backup
- pas de passphrase ? Connexion par clé privée ---> https://www.citizenz.info/connexion-par-cle-privee-a-un-serveur-ssh

Répondre
#10  - Nicolas a dit :

Merci pour la réponse !
Pour ma part j'ai ajouté une passphrase sur ma clé privée pour ajouter un peu plus de sécurité, je vais voir comment automatiser le processus smile

Répondre
#11  - Nicolas a dit :

Par contre je viens de tester et j'ai le message d'erreur suivant :
receiving incremental file list
rsync: failed to set times on "/media/dossier/test": Operation not permitted (1)
rsync: recv_generator: mkdir "/media/dossier/test/data" failed: Permission denied (13)
Il faut redémarrer ou autre après avoir ajouté la ligne dans visudo ?
Merci !

Répondre
#12  - citizenz7 a dit :

Mille excuses : je t'ai dit des bêtises !
C'est bien sur le serveur d'origine (celui qu'on veut copier) qu'il faut configurer le sudoer.
Exemple :
# visudo
Et dans le fichier mettre :
# Allow user citizenz7 to use rsync with no password for sudoing
citizenz7 ALL= NOPASSWD:/usr/bin/rsync
Comme ça, lorsqu'on se connecte depuis le serveur de backup vers le serveur d'origine avec le user citizenz7, on ne rentre pas de mot de passe pour l'utilisation de sudo avec l'appli rsync.
Désolé, je n'y étais plus smile

Répondre
#13  - Nicolas a dit :

Pas de problème, merci d'avoir répondu déjà mais effectivement ça fonctionne mieux smile
J'ai vu dans un commentaire au dessus de spécifier l'option -A pour conserver les droits, par contre si je fais cela rsync n'a pas le droit d'écrire dans la destination ?

Répondre

Fil RSS des commentaires de cet article

Écrire un commentaire

 Se rappeler de moi sur ce site
Quelle est la septième lettre du mot c59qk64s ?