🔒 Connexion

UNIX/LINUX

Copier et synchroniser à distance : ssh, scp, rsync

26 octobre 2026 · par Romain RICHER

Copier un fichier vers un serveur, récupérer une sauvegarde, maintenir deux répertoires identiques : trois besoins quotidiens, trois outils qui se ressemblent sans faire la même chose. scp copie, rsync synchronise, et la différence n’est pas qu’une question de vocabulaire.

Ce guide suppose la connexion SSH déjà en place — si ce n’est pas le cas, commencez par notre article sur les clés SSH, qui traite l’authentification. On se concentre ici sur le transfert : les syntaxes, les options qui comptent, le mode simulation, la reprise après coupure, et le piège de la barre oblique finale qui fait perdre du temps à tout le monde une fois.

scp ou rsync : lequel ?

scp copie, sans se poser de questions. Chaque fichier est transféré intégralement, qu’il ait changé ou non. Sa syntaxe calque celle de cp, ce qui la rend immédiatement familière.

rsync compare d’abord, puis ne transfère que ce qui diffère — et, à l’intérieur d’un fichier modifié, seulement les portions changées. Sur une seconde copie d’un même dossier, l’écart est spectaculaire.

La règle pratique tient en une phrase : scp pour un fichier ponctuel, rsync dès qu’on répète l’opération. Pour une sauvegarde quotidienne de 10 Go dont 200 Mo changent, rsync transfère 200 Mo là où scp en transfère 10 000.

Un point à connaître : depuis OpenSSH 9, scp utilise en interne le protocole SFTP, l’ancien protocole ayant été jugé trop difficile à sécuriser. La syntaxe n’a pas changé, mais quelques comportements exotiques ont disparu.

scp : la syntaxe de base

Elle se lit comme un cp, avec une destination distante notée utilisateur@machine:chemin.

scp fichier.txt utilisateur@serveur:/var/www/
scp utilisateur@serveur:/var/log/app.log ./

Pour un dossier entier, l’option -r est indispensable :

scp -r site/ utilisateur@serveur:/var/www/

Si le serveur écoute sur un port autre que 22, attention à la majuscule : c’est -P pour scp, alors que ssh utilise -p minuscule. L’incohérence est ancienne et fait trébucher régulièrement.

scp -P 2222 fichier.txt utilisateur@serveur:/var/www/

Deux options utiles : -C compresse pendant le transfert, ce qui aide sur du texte et ne sert à rien sur des fichiers déjà compressés ; -p minuscule conserve dates et permissions.

scp -Cp rapport.csv utilisateur@serveur:/data/

On peut aussi copier de serveur à serveur sans passer par sa machine — à condition que les deux se connaissent :

scp utilisateur@serveur1:/data/fichier.txt utilisateur@serveur2:/data/

rsync : les options qui comptent

La combinaison à retenir est -avz, qu’on retrouve dans la quasi-totalité des exemples :

rsync -avz site/ utilisateur@serveur:/var/www/site/
  • -a : mode archive. Il regroupe la récursivité, la conservation des permissions, des propriétaires, des dates et des liens symboliques. C’est l’option qui fait 90 % du travail ;
  • -v : affiche ce qui est transféré ;
  • -z : compresse pendant le transfert.

Trois options s’y ajoutent souvent :

rsync -avz --progress --partial site/ utilisateur@serveur:/var/www/site/

--progress affiche l’avancement fichier par fichier. --partial conserve les fichiers incomplets en cas de coupure, ce qui permet de reprendre où l’on s’était arrêté plutôt que de tout recommencer — sur une liaison instable, c’est déterminant. Les deux se résument par -P.

Pour un port non standard, rsync passe la consigne à ssh :

rsync -avz -e "ssh -p 2222" site/ utilisateur@serveur:/var/www/site/

La barre oblique finale

C’est le piège le plus célèbre de rsync, et il mérite qu’on s’y arrête.

rsync -av site/ /sauvegarde/
rsync -av site  /sauvegarde/

La première commande copie le contenu de site dans /sauvegarde/. La seconde copie le dossier lui-même, et crée /sauvegarde/site/.

Un seul caractère, deux résultats différents. La règle mnémotechnique : la barre finale signifie « ce qu’il y a dedans ». En cas de doute, le mode simulation décrit plus bas lève l’ambiguïté en une seconde.

Notez que cette subtilité ne concerne que la source. Sur la destination, la barre finale ne change rien.

Simuler avant d’exécuter

L’option -n, ou --dry-run, affiche tout ce qui serait fait sans rien faire :

rsync -avzn --delete site/ utilisateur@serveur:/var/www/site/

C’est le réflexe à prendre systématiquement dès qu’une commande contient --delete, et plus généralement chaque fois qu’on écrit une commande rsync pour la première fois. Quelques secondes de vérification contre le risque d’effacer une arborescence entière.

Supprimer à la destination

Par défaut, rsync ajoute et met à jour, mais ne supprime jamais. Un fichier effacé à la source reste à la destination, indéfiniment.

Pour obtenir un miroir exact, il faut le demander :

rsync -avz --delete site/ utilisateur@serveur:/var/www/site/

Cette option est la plus dangereuse de rsync. Associée à une erreur de chemin, elle vide un répertoire en quelques secondes. Trois précautions valent d’être prises :

  • toujours l’essayer d’abord avec -n ;
  • vérifier deux fois la barre oblique finale de la source ;
  • utiliser --delete-after plutôt que --delete sur les transferts importants : les suppressions n’ont lieu qu’une fois la copie réussie.

L’option --max-delete pose un garde-fou supplémentaire en interrompant l’opération si le nombre de suppressions dépasse un seuil :

rsync -avz --delete --max-delete=50 site/ serveur:/var/www/site/

Exclure des fichiers

Une synchronisation de site n’a pas à transporter les caches, les journaux ni les dépendances :

rsync -avz site/ utilisateur@serveur:/var/www/site/ \
  --exclude 'node_modules' \
  --exclude '*.log' \
  --exclude '.git' \
  --exclude 'cache/'

Quand la liste s’allonge, un fichier la remplace :

rsync -avz --exclude-from='exclusions.txt' site/ serveur:/var/www/site/

L’inverse existe aussi. Pour ne transférer qu’un type de fichier, on combine inclusion et exclusion, l’ordre étant significatif :

rsync -avz --include '*/' --include '*.pdf' --exclude '*' documents/ serveur:/archives/

La première inclusion garde les répertoires, faute de quoi rsync ne descendrait pas dans l’arborescence.

Reprendre un transfert interrompu

Sur un gros fichier et une liaison capricieuse, la combinaison suivante permet de relancer sans repartir de zéro :

rsync -avz --partial --progress gros-fichier.iso serveur:/data/

Si le transfert coupe, relancer la même commande reprend là où elle s’était arrêtée. L’option --append-verify va plus loin en ajoutant à la fin du fichier existant puis en vérifiant l’ensemble — utile sur des fichiers qui ne changent jamais, à éviter sur des fichiers modifiés entre deux tentatives.

Pour ménager une connexion partagée, --bwlimit plafonne le débit en kilo-octets par seconde :

rsync -avz --bwlimit=2000 site/ serveur:/var/www/site/

Sauvegarde incrémentale par liens durs

Une construction élégante permet de garder plusieurs générations de sauvegarde sans multiplier l’espace occupé. L’option --link-dest crée des liens durs vers les fichiers inchangés de la sauvegarde précédente :

rsync -avz --delete \
  --link-dest=/sauvegardes/hier \
  /var/www/site/ /sauvegardes/aujourdhui/

Chaque dossier de sauvegarde apparaît comme une copie complète et se restaure comme telle, mais seuls les fichiers modifiés occupent réellement de la place. Sur trente jours de sauvegarde d’un site qui change peu, l’économie est considérable.

Automatiser

Une synchronisation régulière a vocation à tourner seule. Deux conditions : une authentification par clé sans phrase de passe, et un chemin absolu pour chaque commande.

#!/bin/bash
/usr/bin/rsync -az --delete \
  --exclude-from=/root/exclusions.txt \
  /var/www/site/ sauvegarde@distant:/sauvegardes/site/ \
  >> /var/log/rsync-site.log 2>&1

Notez l’absence de -v : en tâche planifiée, le mode bavard ne fait que gonfler le journal. Notez aussi la redirection des deux flux, sans laquelle une erreur passerait inaperçue.

La mise en place de la planification elle-même fait l’objet d’un article dédié sur cron, at et sleep.

Côté sécurité, la clé utilisée par cette tâche peut être restreinte à la seule commande rsync dans le fichier authorized_keys du serveur distant. Ainsi, même compromise, elle ne donne pas un accès complet au shell.

Vérifier ce qui a été transféré

rsync se fie aux dates et aux tailles pour décider quoi transférer. C’est rapide, et suffisant dans la quasi-totalité des cas. Pour une vérification complète, l’option -c compare les sommes de contrôle :

rsync -avzc --dry-run site/ serveur:/var/www/site/

C’est nettement plus lent, puisqu’il faut lire intégralement les deux côtés — à réserver aux contrôles ponctuels après une opération douteuse.

En résumé

  • scp pour une copie ponctuelle, rsync dès que l’opération se répète ;
  • scp utilise -P majuscule pour le port, là où ssh utilise -p ;
  • rsync -avz couvre l’essentiel, -P y ajoute progression et reprise ;
  • la barre oblique finale de la source décide entre copier le dossier et copier son contenu ;
  • -n avant toute commande contenant --delete, sans exception ;
  • --delete-after et --max-delete comme garde-fous sur les gros transferts ;
  • --link-dest pour des sauvegardes multiples qui n’occupent que la place des différences ;
  • en tâche planifiée : pas de -v, des chemins absolus, et les deux flux redirigés.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les commentaires sont modérés avant publication.