Commande scp Linux : copier des fichiers vers un VPS (rsync, sftp)
- 14 novembre 2026
- 09:00
- Par Adrien Roche
- Tutoriels

La commande scp sous Linux : syntaxe et transferts de base
scp (secure copy) copie des fichiers entre machines via SSH : l'utilisateur, la clé et le port qui fonctionnent avec ssh fonctionnent avec scp. La forme est toujours scp [options] SOURCE DESTINATION, et le côté distant s'écrit user@host:path. Une connexion SSH opérationnelle est indispensable ; si le port 22 ne répond pas encore, commencez par activer SSH sur Ubuntu et le sécuriser.
1. Du local vers le distant (envoi)
scp backup.tar.gz user@SERVER_IP:/home/user/
scp backup.tar.gz user@SERVER_IP:~/backups/renamed.tar.gz
scp *.conf user@SERVER_IP:~/nginx-conf/
Un chemin qui se termine par une barre oblique dépose le fichier dans ce répertoire sous son nom d'origine ; un chemin complet le renomme à l'arrivée. Plusieurs fichiers locaux peuvent précéder la destination tant que celle-ci est un répertoire, et ce répertoire doit déjà exister : scp ne crée pas les parents.
2. Du distant vers le local (téléchargement)
scp user@SERVER_IP:/var/log/nginx/access.log .
scp user@SERVER_IP:'/var/log/nginx/*.log' ./logs/
Le point signifie « ici, même nom ». Mettez les jokers distants entre guillemets pour que votre shell local ne les développe pas. Le distant vers distant fonctionne aussi : scp -3 user@HOST_A:/data/dump.sql user@HOST_B:/data/ fait transiter la copie par votre machine, qui est alors la seule à avoir besoin des identifiants des deux serveurs.
3. Les répertoires avec -r
scp -r ./site user@SERVER_IP:/var/www/
scp -r user@SERVER_IP:/etc/nginx ./nginx-backup
-r copie un répertoire et tout son contenu. La première commande crée /var/www/site sur le serveur ; la seconde rapatrie toute l'arborescence nginx dans un dossier local. Les liens symboliques sont copiés comme des fichiers ordinaires, une raison de plus de préférer rsync pour des arborescences système complètes.
Les options scp vraiment utiles : -P, -i, -C, -p
scp -P 2222 file.txt user@SERVER_IP:/home/user/ # non-default SSH port
scp -i ~/.ssh/id_ed25519 file.txt user@SERVER_IP:~/ # use a specific key
scp -C dump.sql user@SERVER_IP:~/ # compress in transit
scp -rp ./site user@SERVER_IP:/var/www/ # keep times and modes
L'option de port est un -P majuscule. Le -p minuscule signifie « préserver les dates de modification, d'accès et les bits de permission », et comme ssh utilise lui-même -p pour le port, les confondre reste l'erreur scp la plus fréquente. Pour ne plus répéter le port et la clé à chaque appel, définissez l'hôte une fois dans ~/.ssh/config ; scp, rsync et sftp le lisent tous :
Host vps
HostName SERVER_IP
User user
Port 2222
IdentityFile ~/.ssh/id_ed25519
Deux options supplémentaires : -l 8000 limite le transfert à 8 000 Kbit/s (environ 1 Mo/s), et -v montre quelles clés sont proposées quand l'authentification échoue. Depuis OpenSSH 9.0, scp s'appuie sur le protocole SFTP ; la syntaxe ne change pas, mais les astuces shell intégrées dans un chemin distant (une substitution de commande, par exemple) ne s'exécutent plus sur le serveur, et -O rétablit l'ancien protocole pour un serveur très ancien qui refuserait le nouveau mode.
rsync : miroirs, transferts reprenables et exclusions
rsync ne copie que ce qui a changé. La première exécution se comporte comme scp -r ; les suivantes comparent les deux côtés et n'envoient que les différences : les nouveaux fichiers, et pour les fichiers modifiés uniquement les blocs concernés. C'est donc l'outil des déploiements, des sauvegardes et de tout ce qui est volumineux. Il doit être installé des deux côtés (sudo apt install rsync) ; certaines images minimales et certains conteneurs n'en disposent pas.
1. La commande du quotidien
rsync -avz --progress ./site/ user@SERVER_IP:/var/www/site/
rsync -avz --progress user@SERVER_IP:/var/www/site/ ./site-backup/
-a (archive) équivaut à -rlptgoD : récursion, conservation des liens symboliques, préservation des permissions, dates, groupe, propriétaire et fichiers de périphériques ; le propriétaire n'est préservé que si le côté récepteur s'exécute en root. -v liste les fichiers, -z compresse, --progress affiche chaque fichier.
La barre oblique finale compte. ./site/ signifie « le contenu de site » ; ./site signifie « le répertoire lui-même », ce qui créerait /var/www/site/site. Dans le doute, ajoutez -n (--dry-run) et lisez la liste des fichiers avant toute écriture.
2. Un miroir avec --delete
rsync -avzn --delete ./site/ user@SERVER_IP:/var/www/site/ # dry run first
rsync -avz --delete ./site/ user@SERVER_IP:/var/www/site/
--delete supprime les fichiers de destination qui n'existent plus dans la source. Un vrai miroir en a besoin, et c'est aussi ce qui transforme une barre oblique mal placée en répertoire effacé : testez toujours une nouvelle commande --delete en dry-run.
3. Exclure des fichiers
rsync -avz --exclude='node_modules/' --exclude='.git/' --exclude='*.log' ./app/ user@SERVER_IP:/srv/app/
rsync -avz --exclude-from='.rsyncignore' ./app/ user@SERVER_IP:/srv/app/
Les motifs sont relatifs à la racine du transfert ; une barre oblique initiale les ancre, donc /config.php n'exclut que le fichier de premier niveau. --exclude-from lit un motif par ligne.
4. Reprendre un transfert partiel, port et clé personnalisés
rsync -avP -e 'ssh -p 2222 -i ~/.ssh/id_ed25519' ./disk.img user@SERVER_IP:/backup/
-P abrège --partial --progress : si la connexion tombe, le fichier partiel est conservé et relancer la même commande reprend là où elle s'était arrêtée. Les options SSH passent par -e, et ici le port s'écrit -p en minuscule parce que c'est l'option de ssh, pas celle de rsync ; une entrée Host dans ~/.ssh/config supprime toute la chaîne -e.
sftp : transferts interactifs sur la même connexion SSH
sftp vous donne une invite de type FTP au-dessus de SSH, pratique pour parcourir avant de copier.
sftp -P 2222 -i ~/.ssh/id_ed25519 user@SERVER_IP
sftp> ls -l /var/www
sftp> lcd ~/Downloads
sftp> get /var/log/syslog
sftp> put -r ./site /var/www/
sftp> reget backup.iso
sftp> bye
Les commandes commençant par l agissent sur votre machine (lcd, lls, lpwd) ; les autres agissent sur le serveur. put -r et get -r copient des répertoires, reget et reput reprennent un fichier interrompu, et !commande exécute une commande shell locale sans quitter la session. sftp -b commands.txt user@SERVER_IP rejoue un fichier de ces commandes pour les tâches cron.
Copier des fichiers depuis Windows : scp dans PowerShell et WinSCP
Windows 10 (1809 et suivantes) et Windows 11 embarquent le client OpenSSH : scp, sftp et ssh existent donc dans PowerShell avec les mêmes options que sous Linux :
cd C:\Users\you\Projects
scp -P 2222 -i $HOME\.ssh\id_ed25519 .\site.zip user@SERVER_IP:/home/user/
scp -r user@SERVER_IP:/var/www/site $HOME\Downloads
Les clés se trouvent dans C:\Users\you\.ssh\ à côté de known_hosts, et ssh-keygen -R SERVER_IP y fonctionne aussi. Des chemins relatifs après un cd évitent toute confusion entre une lettre de lecteur et un nom d'hôte. rsync n'est pas inclus ; le plus simple pour l'obtenir est WSL : wsl rsync -avz /mnt/c/Users/you/site/ user@SERVER_IP:/var/www/site/.
Pour une interface graphique, WinSCP est le choix habituel : il parle SFTP et SCP, propose une vue à deux volets avec glisser-déposer, et sa commande Synchronize fait à peu près ce que fait rsync --delete. Il attend des clés au format .ppk de PuTTY et propose de convertir une clé OpenSSH quand vous en sélectionnez une. Pour tout ce qui est déployé de façon répétée, une ligne de scp ou de rsync dans un script reste plus facile à relire et à automatiser.
scp, rsync ou sftp : lequel choisir
| Tâche | Meilleur outil | Pourquoi |
|---|---|---|
| Un fichier, une seule fois | scp | Commande la plus courte, rien à installer |
| Un répertoire, première copie | scp -r ou rsync -a | Résultat équivalent |
| Déploiements ou sauvegardes répétés | rsync | Seules les données modifiées sont envoyées |
| Miroir avec suppressions | rsync --delete | scp ne peut pas supprimer de fichiers |
| Reprendre un gros fichier | rsync -P ou reget en sftp | scp repart de zéro |
| Parcourir, puis choisir des fichiers | sftp ou WinSCP | Listing interactif |
| Des milliers de petits fichiers | rsync ou tar via ssh | Le surcoût par fichier domine avec scp |
| Windows sans WSL | scp dans PowerShell ou WinSCP | Pas de rsync natif |
Règle empirique : scp quand vous pouvez taper la commande de mémoire, rsync dès que vous la lancerez deux fois.
Les astuces de vitesse qui changent vraiment quelque chose
- La compression n'est pas gratuite.
-C(scp) et-z(rsync) réduisent le texte, les dumps SQL et les logs, mais gaspillent du CPU sur les archives, les images et la vidéo. Sitopmontresshdà 100 % pendant un transfert, retirez l'option. - Regroupez les petits fichiers. Les allers-retours par fichier dominent quand vous poussez une arborescence de sources ; un seul flux va plus vite :
tar czf - ./site | ssh user@SERVER_IP 'tar xzf - -C /var/www/'. - Essayez un autre chiffrement sur les liens rapides. Quand le processus ssh est lui-même le goulot d'étranglement,
scp -c aes128-gcm@openssh.comexploite les instructions AES intégrées à presque tous les processeurs modernes. - Protégez les transferts longs. Lancez-les dans
tmuxouscreenpour qu'une session coupée ne tue pas la copie, ou utilisezrsync -Pet relancez. - Vérifiez et limitez le débit.
sha256sum filedoit donner le même résultat des deux côtés ;scp -loursync --bwlimitévite qu'une sauvegarde n'affame l'application.
Permissions, propriétaire et erreurs courantes
Permission denied sur le chemin de destination
scp: /var/www//html/: Permission denied signifie que la connexion a réussi mais que cet utilisateur ne peut pas écrire à cet endroit. Copiez dans votre répertoire personnel puis faites sudo mv, donnez la propriété de la cible à l'utilisateur (sudo chown -R user:user /var/www/site), ou avec rsync ajoutez --rsync-path="sudo rsync", qui fonctionne quand l'utilisateur de connexion dispose d'un sudo sans mot de passe, comme expliqué dans créer un utilisateur avec les droits sudo sous Linux. Envoyer en root évite l'erreur mais laisse des fichiers appartenant à root qu'un serveur web ne peut pas écrire : faites ensuite sudo chown -R www-data:www-data /var/www/site.
Permission denied (publickey)
Le serveur a refusé l'authentification. Vérifiez le nom d'utilisateur, forcez la clé avec -i, ajoutez -v ; sur le VPS, sudo journalctl -u ssh -n 30 en donne la raison.
Remote host identification has changed
Attendu après une réinstallation ou un changement d'IP : la clé d'hôte ne correspond plus à ~/.ssh/known_hosts. Si vous avez bien réinstallé le serveur, lancez ssh-keygen -R SERVER_IP et reconnectez-vous. Sinon, cherchez pourquoi avant de saisir un mot de passe où que ce soit.
No such file or directory
scp ne crée pas les répertoires parents : lancez d'abord ssh user@SERVER_IP 'mkdir -p /var/www/site'. rsync ne crée que le dernier composant du chemin (--mkpath, rsync 3.2.3+, crée les parents).
rsync: command not found, ou protocol data stream (code 12)
rsync manque d'un côté ; faites sudo apt install rsync à cet endroit et réessayez.
Des scripts envoyés qui refusent de s'exécuter
Les fichiers venus de Windows n'ont pas le bit d'exécution et portent souvent des fins de ligne CRLF, ce qui produit bad interpreter: No such file or directory. Corrigez les deux avec chmod +x deploy.sh et sed -i 's/\r$//' deploy.sh ; le volet shebang est traité dans ce qu'est un fichier .sh et comment bash l'exécute. Un dernier grand classique : scp file.txt user@SERVER_IP sans les deux-points après l'hôte est une copie locale qui crée silencieusement un fichier nommé user@SERVER_IP.
Tout cela suppose un serveur accessible en SSH en root ou avec un utilisateur sudo, où la limite est le transfert lui-même et non un quota. Un VPS Linux chez rdp.monster est ce genre de machine : accès root complet, CPU et RAM dédiés, bande passante illimitée (fair-use), sans KYC, crypto acceptée, à partir de 8,99 $ par mois, et le serveur est en ligne environ 10 secondes après confirmation du paiement, de sorte que la première chose que vous y lancerez peut être le scp de la première étape.
Foire aux questions
La commande scp est-elle obsolète ?
scp déplace les fichiers via SFTP. La commande, ses options et sa syntaxe user@host:path ne changent pas, donc les scripts existants continuent de fonctionner ; seule l'expansion shell dans les chemins distants se comporte différemment, et -O rétablit l'ancien protocole pour les serveurs qui en ont besoin. Pour une nouvelle automatisation, rsync ou sftp sont plus capables, mais scp reste très bien pour des copies ponctuelles.Puis-je utiliser scp avec un mot de passe au lieu d'une clé SSH ?
PasswordAuthentication yes, scp demande le mot de passe et la copie se poursuit ; aucune option ne permet de passer le mot de passe en ligne de commande, et les outils comme sshpass qui le font le laissent dans l'historique de votre shell. Les serveurs durcis désactivent généralement la connexion par mot de passe, auquel cas scp échoue avec Permission denied (publickey) tant que vous n'avez pas installé une clé avec ssh-copy-id. Ce sont aussi les clés qui permettent aux scripts de tourner sans intervention.scp écrase-t-elle les fichiers existants sans demander ?
-n (--dry-run) affiche ce qui changerait, --ignore-existing laisse intacts les fichiers déjà présents, --update ignore les fichiers plus récents à la destination, et --backup --backup-dir=DIR conserve les versions remplacées. Pour tout ce qui est irremplaçable, copiez dans un répertoire neuf et basculez ensuite.Comment copier des fichiers directement entre deux serveurs VPS ?
rsync -avz /data/ user@OTHER_IP:/data/ (ou scp -r) pour que les données ne passent jamais par votre connexion domestique. Cela suppose que le premier serveur détienne une clé acceptée par le second. Si vous préférez ne pas déposer de clés sur les serveurs, scp -3 user@HOST_A:/path user@HOST_B:/path copie via votre machine en n'utilisant que vos identifiants locaux, au prix d'un téléchargement et d'un envoi complets.Adrien Roche, Rédacteur infrastructure & hébergement
Ingénieur systèmes avec plus de 10 ans d'exploitation de parcs Windows Server et Linux. Adrien gère la documentation infrastructure de rdp.monster et rédige nos guides sur le RDP, l'hébergement VPS, l'administration serveur, le réseau et les outils de confidentialité.
Articles connexes




