Aller au contenu
Administration Linux medium

Maîtriser SCP : Transfert sécurisé de fichiers Linux

9 min de lecture

Quand on déploie une configuration sur un serveur, récupère des logs ou transfère un fichier rapidement entre deux machines, scp (Secure Copy Protocol) est l’outil le plus direct. Il utilise SSH pour chiffrer le transfert de bout en bout : une seule commande, pas de serveur FTP à configurer. Pour les transferts ponctuels et rapides, scp reste imbattable en simplicité.

  • Copier un fichier vers ou depuis un serveur distant
  • Transférer un répertoire complet avec -r
  • Utiliser un port SSH personnalisé avec -P (majuscule)
  • Connaître la différence entre -p et -P
  • Identifier quand préférer rsync à scp

scp fait partie des outils de transfert de fichiers sous Linux. Chaque outil a sa spécialité :

CommandeSpécialitéQuand l’utiliser
scpCopie distante via SSHTransfert rapide one-shot
rsyncSynchronisation intelligente (delta)Sauvegardes, gros fichiers, reprise
sftpTransfert interactif via SSHNavigation distante, sessions prolongées
tar + sshArchivage + transfertArbres de fichiers avec permissions complexes
curl / wgetTéléchargement HTTP/FTPRécupérer depuis le web

Quand utiliser scp plutôt que les autres :

SituationMeilleur outilPourquoi
Copier un fichier unique vers un serveurscpPlus simple que rsync pour un seul fichier
Sauvegarder un dossier régulièrementrsyncNe transfère que les différences
Transfert coupé en coursrsync -Pscp recommence à zéro
Transférer un fichier très volumineuxrsyncReprise possible, bande passante contrôlée
Récupérer un log rapidementscpUne seule commande, rapide
Synchronisation bi-directionnelleunisonrsync et scp sont unidirectionnels

🧠 Modèle mental — Comment fonctionne scp

scp = Source → [Tunnel SSH chiffré] → Destination

Modèle mental scp : la source (locale ou distante) est chiffrée via SSH et copiée vers la destination

Points clés

  • scp copie des fichiers à travers un tunnel SSH chiffré
  • La syntaxe user@host:chemin désigne un emplacement distant
  • Sans -r, scp ne copie que des fichiers (pas de dossiers)
  • -P (majuscule) pour le port, -p (minuscule) pour préserver les permissions
  • Aucune reprise de transfert possible : si ça coupe, on recommence
  • Pour des transferts réguliers, préférer rsync à scp

Règles d'or

1
Utiliser des clés SSH plutôt que des mots de passe Plus sécurisé et permet l'automatisation sans interaction.
2
Préférer rsync pour les transferts volumineux ou récurrents rsync reprend les transferts interrompus et ne transfère que les différences.

Vocabulaire essentiel

-r
Récursif : copie les dossiers et leur contenu
-P (majuscule)
Spécifier le port SSH (attention : majuscule !)
-p (minuscule)
Préserver permissions et dates
-C
Activer la compression pendant le transfert
-q
Mode silencieux (pas de barre de progression)
-v
Mode verbeux (détails de connexion SSH)
📚 Pour aller plus loin — 6 options avancées
-l
Limiter la bande passante (en Kbit/s)
-3
Transfert entre 2 serveurs via la machine locale
-i
Spécifier un fichier de clé privée SSH
-o
Passer des options SSH (StrictHostKeyChecking, etc.)
-F
Utiliser un fichier de config SSH alternatif
-c
Choisir l'algorithme de chiffrement

Le principe est simple : scp prend un fichier source (local ou distant), le fait passer à travers un tunnel SSH chiffré, et le dépose à la destination (locale ou distante). C’est exactement comme cp, mais à travers le réseau et de manière sécurisée.

Fenêtre de terminal
scp [OPTIONS] SOURCE DESTINATION
ScénarioSyntaxeExemple
Local → Distantscp fichier user@srv:/dest/scp config.conf admin@web-01:/etc/nginx/
Distant → Localscp user@srv:/fichier /local/scp admin@web-01:/var/log/app.log ~/logs/
Distant → Distantscp -3 user1@srv1:/f user2@srv2:/dest/scp -3 admin@web-01:/log admin@backup:/logs/

C’est la source d’erreur n°1 avec scp :

OptionSignificationExemple
-p (minuscule)Préserve les permissions et datesscp -p script.sh user@srv:/opt/
-P (majuscule)Port SSH personnaliséscp -P 2222 fichier user@srv:/tmp/

Astuce mnémotechnique : Port = Pmajuscule, permissions = pminuscule.

Fenêtre de terminal
# ❌ ERREUR FRÉQUENTE : -p au lieu de -P pour le port
scp -p 2222 fichier.txt user@serveur:/tmp/
# → Ne change pas le port, préserve les permissions et essaie de copier "2222" !
# ✅ CORRECT : -P (majuscule) pour le port
scp -P 2222 fichier.txt user@serveur:/tmp/
OptionSignificationUsage
-rRécursifCopier un dossier complet
-P <port>Port SSHServeur SSH sur port non standard
-pPréserverConserver permissions et dates
-CCompressionAccélérer sur connexions lentes
-vVerboseDébugger les problèmes SSH
-qQuietPas de barre de progression
-l <Kbit/s>LimiterContrôler la bande passante
-i <clé>IdentityUtiliser une clé SSH spécifique

La combo standard :

Fenêtre de terminal
# Envoi simple vers un serveur
scp config.conf admin@web-01:/etc/nginx/
# Dossier complet avec compression et port personnalisé
scp -r -C -P 2222 ~/projet/ deployer@prod:/var/www/app/
# Récupérer des logs avec préservation des dates
scp -p admin@web-01:/var/log/app.log ~/logs/

Par défaut, scp ne copie que les fichiers simples. Pour copier un dossier avec tout son contenu, l’option -r (récursif) est obligatoire :

Fenêtre de terminal
# ❌ ERREUR : scp refuse de copier un dossier sans -r
scp dossier/ user@serveur:/tmp/
# → "not a regular file"
# ✅ CORRECT : -r pour récursif
scp -r dossier/ user@serveur:/tmp/

L’option -3 permet de copier un fichier d’un serveur à un autre en passant par votre machine locale comme relais :

Fenêtre de terminal
# Copie logs de web-01 vers backup-01, via votre machine
scp -3 admin@web-01:/var/log/app.log admin@backup-01:/logs/

Sans -3, scp tente une connexion directe entre les deux serveurs (qui doit être autorisée).

Pour les transferts automatisés (scripts, CI/CD), utilisez une clé dédiée :

Fenêtre de terminal
# Clé SSH spécifique
scp -i ~/.ssh/deploy_key app.tar.gz deployer@prod:/releases/
# Combiné avec port personnalisé
scp -i ~/.ssh/deploy_key -P 2222 app.tar.gz deployer@prod:/releases/

Sur les connexions lentes ou pour les fichiers texte volumineux, la compression accélère le transfert :

Fenêtre de terminal
# Compression activée
scp -C database-dump.sql admin@backup:/dumps/
# Limiter la bande passante (en Kbit/s, pas Ko/s !)
scp -l 800 gros-fichier.iso user@serveur:/data/
# 800 Kbit/s ≈ 100 Ko/s
  • Utiliser des clés SSH plutôt que des mots de passe pour l’automatisation
  • Vérifier les permissions après transfert : ssh user@srv "ls -la /chemin/"
  • Préférer un compte non-root pour les transferts, puis déplacer avec sudo si nécessaire
  • Surveiller les connexions : sudo journalctl -u ssh

scp est idéal pour les transferts ponctuels. Mais pour certains cas, rsync est meilleur :

Critèrescprsync
Reprise de transfert❌ Recommence à zéro✅ Reprend où il s’est arrêté
Transfert delta❌ Copie tout✅ Ne copie que les changements
Exclusion de fichiers❌ Impossible--exclude
Dry-run❌ Impossible-n pour tester
Simplicité✅ Plus simple⚠️ Plus d’options à connaître
Disponibilité✅ Partout⚠️ Pas toujours installé

Règle simple : transfert ponctuel → scp. Transfert récurrent ou volumineux → rsync.

Maintenant que vous maîtrisez les bases, voici des patterns prêts à l’emploi pour les cas fréquents.

Ces recettes couvrent les cas d'usage les plus fréquents. Cliquez sur un pattern pour voir la formule complète et un exemple prêt à copier.

Fichier local → serveur distant Base

Envoyer un fichier vers un serveur.

scp config.conf admin@web-01:/etc/nginx/
Formule scp <fichier> user@serveur:<destination>/
Exemple
scp config.conf admin@web-01:/etc/nginx/
Paramètres
  • <fichier> — Chemin du fichier local
  • user@serveur — Identifiant et adresse du serveur
  • <destination> — Chemin sur le serveur
Serveur distant → machine locale Base

Récupérer un fichier depuis un serveur.

scp admin@web-01:/var/log/nginx/error.log ~/logs/
Formule scp user@serveur:<fichier> <destination>/
Exemple
scp admin@web-01:/var/log/nginx/error.log ~/logs/
Paramètres
  • user@serveur:<fichier> — Source distante
  • <destination> — Dossier local
Dossier complet récursif Base

Copier un répertoire avec tout son contenu.

scp -r ~/projet/ deployer@prod:/var/www/app/
Formule scp -r <dossier>/ user@serveur:<destination>/
Exemple
scp -r ~/projet/ deployer@prod:/var/www/app/
Paramètres
  • -r — Copie récursive
Port SSH personnalisé Inter.

Transférer quand le serveur SSH n'écoute pas sur le port 22.

scp -P 2222 backup.tar.gz admin@srv:/backups/
Formule scp -P <port> <fichier> user@serveur:<destination>/
Exemple
scp -P 2222 backup.tar.gz admin@srv:/backups/
Paramètres
  • -P — Port SSH (attention : majuscule !)
Transfert entre deux serveurs Inter.

Copier un fichier d'un serveur à un autre via la machine locale.

scp -3 admin@web-01:/var/log/app.log admin@backup-01:/logs/
Formule scp -3 user1@srv1:<fichier> user2@srv2:<destination>/
Exemple
scp -3 admin@web-01:/var/log/app.log admin@backup-01:/logs/
Paramètres
  • -3 — Passer par la machine locale comme relais
Préserver les attributs Base

Conserver les permissions et dates du fichier.

scp -p deploy.sh admin@prod:/opt/scripts/
Formule scp -p <fichier> user@serveur:<destination>/
Exemple
scp -p deploy.sh admin@prod:/opt/scripts/
Paramètres
  • -p — Préserve permissions, dates modification et accès
Transfert compressé Inter.

Accélérer le transfert sur connexions lentes.

scp -C database-dump.sql admin@backup:/dumps/
Formule scp -C <fichier> user@serveur:<destination>/
Exemple
scp -C database-dump.sql admin@backup:/dumps/
Paramètres
  • -C — Active la compression (efficace pour le texte)
Clé SSH spécifique Inter.

Utiliser une clé SSH dédiée au transfert.

scp -i ~/.ssh/deploy_key app.tar.gz deployer@prod:/releases/
Formule scp -i <clé> <fichier> user@serveur:<destination>/
Exemple
scp -i ~/.ssh/deploy_key app.tar.gz deployer@prod:/releases/
Paramètres
  • -i — Chemin vers la clé privée SSH

Ces erreurs courantes peuvent faire perdre du temps ou causer des dégâts. Les pièges les plus critiques sont affichés en premier.

Confusion entre -p et -P

scp -p 2222 fichier.txt user@serveur:/tmp/

Attention
Le piège : scp -p 2222 fichier.txt user@serveur:/tmp/
Symptôme : Erreur de connexion ou port ignoré
Cause : -p (minuscule) préserve les permissions, -P (majuscule) change le port SSH.
Correction : Retenir : P = Port (majuscule pour le Port)
scp -P 2222 fichier.txt user@serveur:/tmp/
Oubli du -r pour les dossiers

scp dossier/ user@serveur:/tmp/

Attention
Le piège : scp dossier/ user@serveur:/tmp/
Symptôme : Erreur : "not a regular file" ou rien n'est copié
Cause : Par défaut, scp ne copie que les fichiers simples, pas les dossiers.
Correction : Ajouter -r pour copier un répertoire
scp -r dossier/ user@serveur:/tmp/
Espaces dans les chemins distants

scp user@serveur:/home/user/Mon Dossier/file.txt .

Attention
Le piège : scp user@serveur:/home/user/Mon Dossier/file.txt .
Symptôme : Erreur ou fichier introuvable
Cause : Le shell interprète l'espace comme séparateur d'arguments.
Correction : Échapper les espaces ou utiliser des guillemets
scp "user@serveur:/home/user/Mon\ Dossier/file.txt" .
Écrasement silencieux sans confirmation

scp user@serveur:/config/new.conf ~/config/important.conf

Attention
Le piège : scp user@serveur:/config/new.conf ~/config/important.conf
Symptôme : Le fichier local est écrasé sans avertissement
Cause : scp écrase la destination sans demander confirmation.
Correction : Vérifier avant de copier, ou sauvegarder le fichier existant
cp ~/config/important.conf ~/config/important.conf.bak && scp user@serveur:/config/new.conf ~/config/important.conf
Pas de reprise de transfert

scp gros-fichier.iso user@serveur:/data/ (coupure réseau)

Info
Le piège : scp gros-fichier.iso user@serveur:/data/ (coupure réseau)
Symptôme : Le transfert recommence à zéro après une coupure
Cause : scp ne supporte pas la reprise de transfert (contrairement à rsync)
Correction : Utiliser rsync -avP pour les gros fichiers ou connexions instables
rsync -avP gros-fichier.iso user@serveur:/data/
Unité de -l en Kbit/s (pas Ko/s)

scp -l 100 fichier user@srv:/tmp/ # pensant limiter à 100 Ko/s

Info
Le piège : scp -l 100 fichier user@srv:/tmp/ # pensant limiter à 100 Ko/s
Symptôme : Transfert beaucoup plus lent que prévu (~12,5 Ko/s)
Cause : -l utilise des Kbit/s. 100 Kbit/s = ~12,5 Ko/s.
Correction : Multiplier par 8 pour convertir Ko/s → Kbit/s
scp -l 800 fichier user@srv:/tmp/  # ≈ 100 Ko/s

🔧 Quand ça ne marche pas

Méthodes de debug

Mode verbeux

Affiche tous les détails de la négociation SSH et du transfert.

scp -v fichier.txt user@serveur:/tmp/

Tester la connexion SSH

Vérifier que SSH fonctionne avant scp.

ssh -v user@serveur "echo OK"

Vérifier le port SSH

S'assurer que le port est ouvert.

nc -zv serveur 22

Tester avec un petit fichier

Isoler un problème de taille de fichier.

echo "test" | ssh user@serveur "cat > /tmp/test.txt"

Erreurs fréquentes

scp: /chemin/fichier: Permission denied
Causes possibles
  • L'utilisateur distant n'a pas les droits d'écriture
  • Le répertoire destination n'existe pas
Diagnostic
  1. Vérifier les permissions : ssh user@serveur "ls -la /chemin/"
  2. Vérifier l'existence du dossier : ssh user@serveur "test -d /chemin && echo OK"
✅ Solution

Ajuster les permissions ou copier vers un dossier autorisé (/tmp/)

Vérifier avec :
ssh user@serveur "ls -la /chemin/"
ssh: connect to host serveur port 22: Connection refused
Causes possibles
  • Le service SSH n'est pas démarré sur le serveur
  • Le pare-feu bloque le port 22
  • Le serveur utilise un port différent
Diagnostic
  1. Tester le port : nc -zv serveur 22
  2. Vérifier SSH : ssh user@serveur
✅ Solution

Démarrer sshd, ouvrir le port dans le pare-feu, ou utiliser -P <port>

Vérifier avec :
nc -zv serveur 22
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
Causes possibles
  • Le serveur a été réinstallé
  • Attaque man-in-the-middle (rare mais possible)
Diagnostic
  1. Vérifier avec l'admin si le serveur a changé
  2. Comparer l'empreinte : ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
✅ Solution

Supprimer l'ancienne clé et reconnecter

Vérifier avec :
ssh-keygen -R serveur && ssh user@serveur
scp: /chemin/dossier: not a regular file
Causes possibles
  • Tentative de copier un dossier sans l'option -r
Diagnostic
  1. Vérifier si la source est un dossier : file /chemin/dossier
✅ Solution

Ajouter l'option -r pour copier récursivement

Vérifier avec :
scp -r dossier/ user@serveur:/tmp/
scp: /chemin/fichier: No space left on device
Causes possibles
  • Le disque de destination est plein
  • Le quota utilisateur est atteint
Diagnostic
  1. Vérifier l'espace : ssh user@serveur "df -h"
  2. Vérifier le quota : ssh user@serveur "quota -v"
✅ Solution

Libérer de l'espace ou augmenter le quota sur le serveur distant

Vérifier avec :
ssh user@serveur "df -h /chemin/"

📋 Cheatsheet scp

📝 Syntaxe :

scp fichier user@host:/chemin/ Envoyer un fichier
scp user@host:/chemin/fichier . Récupérer un fichier
scp -3 user1@srv1:f user2@srv2:/ Transfert inter-serveurs

🚀 Commandes types :

Fichier local → serveur distant Envoyer un fichier vers un serveur.
scp config.conf admin@web-01:/etc/nginx/
Serveur distant → machine locale Récupérer un fichier depuis un serveur.
scp admin@web-01:/var/log/nginx/error.log ~/logs/
Dossier complet récursif Copier un répertoire avec tout son contenu.
scp -r ~/projet/ deployer@prod:/var/www/app/
Préserver les attributs Conserver les permissions et dates du fichier.
scp -p deploy.sh admin@prod:/opt/scripts/

⚙️ Options

-r Copie récursive (dossiers) scp -r dossier/ user@srv:/tmp/
-P <port> Port SSH (MAJUSCULE) scp -P 2222 f.txt user@srv:/
-p Préserve permissions/dates scp -p script.sh user@srv:/
-C Active la compression scp -C dump.sql user@srv:/
-v Mode verbeux (debug) scp -v f.txt user@srv:/
-q Mode silencieux scp -q f.txt user@srv:/
-l <Kbit/s> Limiter la bande passante scp -l 800 f user@srv:/
-i <clé> Clé SSH privée scp -i ~/.ssh/key f user@srv:/
-o <option> Option SSH scp -o StrictHostKeyChecking=no f srv:/
-F <config> Fichier config SSH alternatif scp -F ~/.ssh/custom f srv:/
-c <algo> Algorithme de chiffrement scp -c aes256-ctr f user@srv:/

🔗 Composition

scp -r -C -P 2222 Dossier + compression + port scp -r -C -P 2222 d/ u@s:/
scp -p -i key fichier Préserver + clé spécifique scp -p -i key f u@s:/

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
5 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

  • -r : obligatoire pour copier un dossier
  • -P (majuscule) pour le port, -p (minuscule) pour les permissions
  • -v : indispensable pour diagnostiquer les problèmes SSH
  • Pas de reprise : si le transfert s’interrompt, il recommence
  • Préférer rsync pour les transferts réguliers ou volumineux

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.