Rsync

rsync
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.

Comment copier des fichiers avec Rsync via SSH+Clés

Configuration des clés publiques SSH

Sur notre serveur d’origine, nous allons générer des clés SSH publiques sans mot de passe

ssh-keygen -f ~/.ssh/id_rsa -q -P ""
cat ~/.ssh/id_rsa.pub

C’est notre clé publique SSH qui peut être placée sur d’autres hôtes pour nous donner accès :

ssh-rsa AAAAB3NzaC1yc2EAAAADAADAQABAAABAAABAQDLVDBIpdpfePg/a6h8au1HTKPPrg8wuTrjdh0QFVPpTI4KHctf6/FGg1NOgM+++hrDlbrDVStKn/b3Mu65///tuvY5SG9sR4vrINCSQF+++ a+YRTGU6Sn4ltKpyj 3usHERvBndtFXoD root@cloudads

Copiez cette clé dans votre presse-papiers et connectez-vous à votre serveur de destination.

Placez cette clé SSH dans votre fichier ~/.ssh/authorized_keys
Si votre dossier SSH n’existe pas, créez-le manuellement :

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_key
chmod 0644 ~/.ssh/authorized_key

Synchroniser les fichiers

Rsync est un grand utilitaire, car il vous permet, entre autres, de copier des fichiers récursivement avec compression, et sur un canal crypté.

Nous copierons un fichier de notre serveur d’origine (198.211.117.101) dans /root/bigfile.txt vers notre serveur de destination (IP : 198.211.117.129) et l’enregistrerons dans /root/bigfile.txt également.

Connectez-vous au 198.211.117.101 et synchronisez le fichier avec 198.211.117.129 :

rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /root/bigfile.txt 198.211.117.129:/root/

Si vous utilisez un autre utilisateur, par exemple “username”, vous devrez l’ajouter devant le serveur de destination. Assurez-vous d’avoir votre clé publique dans le fichier ~/.ssh/authorized_keys de cet utilisateur :

rsync -avz -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /root/bigfile.txt username@198.211.117.129:/

Les options SSH sont utiles pour garder Rsync silencieux et ne pas vous demander une validation à chaque fois que vous vous connectez à un nouveau serveur.

L’option UserKnownHostsFile définit un fichier à utiliser pour la base de données des clés hôte utilisateur au lieu de ~/.ssh/known_hosts par défaut. Vous pouvez le définir sur /dev/null. Le StrictHostKeyChecking doit être réglé sur “no”, pour que ssh ajoute automatiquement de nouvelles clés hôte aux fichiers hôtes connus de l’utilisateur.
Si cet indicateur est défini sur “ask”, de nouvelles clés hôte seront ajoutées aux fichiers hôte connus de l’utilisateur seulement après que l’utilisateur ait confirmé que c’est ce qu’il veut vraiment faire, et ssh refusera de se connecter aux hôtes dont la clé hôte a changé.
Les clés hôte des hôtes connus seront vérifiées automatiquement dans tous les cas. L’argument doit être “yes”, “no” ou “ask”. La valeur par défaut est “ask”.

Avec utilisateur, port, fichier clé, destination dans un domaine. La clé doit avoir les droits suivants : chmod 0700 ~/.ssh/kvm-vps591606

rsync -avz -e "ssh -p 55031 -i ~/.ssh/kvm-vps591606 " --progress /srv/data/musique/* debadm@cinay.xyz:/srv/musique/

Utiliser rsync (+ ssh et sudo)

exemple 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
  • --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.

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.

rsync et sudo

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

user ALL= NOPASSWD:/usr/bin/rsync 

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/

Transfert volumineux

Lors du transfert de grandes quantités de données, il est recommandé d’exécuter la commande rsync dans une session d’écran ou d’utiliser l’option -P :

rsync -a -P remote_user@remote_host_or_ip:/opt/media/ /opt/media/

man rsync

man rsync