Commande scp : utilisation et options, copie de dossiers et choix du port
scp est l'outil de copie qui sert à échanger des fichiers avec un serveur auquel vous vous connectez en SSH. Pour envoyer un fichier avec la commande scp, vous indiquez d'abord la source, puis la destination, comme avec cp. En envoyant des fichiers et des dossiers d'un serveur AlmaLinux 9 vers un serveur Debian 12, puis en les récupérant, nous avons constaté que le transfert passait par le protocole SFTP et qu'un fichier de 20MB arrivait en moins de 1 seconde.
Toutes les sorties ci-dessous sont le résultat tel quel de scp d'OpenSSH 9.9 exécuté avec le compte root côté envoi. Seules les adresses de serveur et les noms de compte ont été remplacés par des valeurs d'exemple.
1️⃣ Utilisation de scp et chemins distants
Devant un chemin du serveur distant, on ajoute [compte@adresse du serveur:]. Un chemin sans deux-points est compris comme un chemin du serveur où vous exécutez la commande : c'est donc le côté portant les deux-points qui détermine l'envoi ou la réception.
Envoie report.txt du dossier courant vers le dossier scp-test situé dans le répertoire personnel du serveur distant.
scp report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.1KB/s 00:00Une fois le transfert terminé, le nom du fichier, la progression, la taille, la vitesse et la durée s'affichent sur une ligne. Cet indicateur de progression n'apparaît que lors d'une exécution dans un terminal. Si vous redirigez la sortie vers un fichier, ce fichier reste donc vide.
Pour récupérer un fichier, indiquez d'abord le chemin distant, puis le chemin local d'enregistrement.
scp user@203.0.113.10:~/scp-test/report.txt ./downloads/report.txt 100% 14 2.7KB/s 00:00Si le chemin de destination se termine par un nom de fichier plutôt que par un dossier, le fichier est enregistré sous ce nom. Après l'envoi avec la commande ci-dessous, report.txt se trouvait dans le dossier côté réception sous le nom report-1028.txt.
scp report.txt user@203.0.113.10:~/scp-test/report-1028.txtreport.txt 100% 14 4.6KB/s 00:00🔲 Simulateur de la commande scp
Dans le simulateur ci-dessous, vous pouvez saisir vous-même des commandes d'envoi, de réception et de copie de dossiers, et vérifier la sortie de chaque option.
2️⃣ Options de la commande scp
Les options se placent juste après scp, avant la source. -P, qui indique le port, est en majuscule, alors que -p en minuscule conserve les dates et les permissions : si vous inversez la casse, c'est donc une autre action qui s'exécute.
-l fixe la limite de vitesse de transfert en Kbit/s. Sans option, un fichier de 20MB a été transféré en moins de 1 seconde.
scp backup.tar.gz user@203.0.113.10:~/scp-test/backup.tar.gz 100% 20MB 53.6MB/s 00:00-l 8000 correspond à environ 1,000KB par seconde. En envoyant le même fichier avec -l 8000, l'indicateur de progression a affiché 996.5KB/s et le transfert a pris 20 secondes.
scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gzbackup.tar.gz 100% 20MB 996.5KB/s 00:20-C compresse les données sur la connexion SSH selon la même méthode que gzip. Nous avons envoyé trois fois chacun un fichier journal de 19MB aux phrases répétées : entre ces deux serveurs, les envois avec -C ont été un peu plus lents.
| Commande | Fichier | Temps d'exécution | Vitesse de l'indicateur de progression |
|---|---|---|---|
| scp backup.tar.gz | 20MB | 0.68 s | 53.6MB/s |
| scp -l 8000 backup.tar.gz | 20MB | 20.82 s | 996.5KB/s |
| scp access.log (3 fois) | 19MB | 0.79~0.89 s | — |
| scp -C access.log (3 fois) | 19MB | 0.84~0.97 s | — |
Le temps d'exécution va du lancement de la commande à la fin du transfert, connexion comprise. Le manuel de ssh explique lui aussi que la compression est utile sur les lignes lentes et ralentit le transfert sur les réseaux rapides.
-v affiche le déroulement de la connexion au transfert sous forme de lignes debug1 : il sert donc à trouver la cause lorsque la connexion échoue ou s'arrête à l'authentification. La sortie étant longue, nous n'avons gardé avec grep que les lignes d'authentification et de transfert.
scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 secondsLa ligne [Sending subsystem: sftp] signifie que scp a envoyé le fichier avec le protocole SFTP. Depuis OpenSSH 9.0, scp utilise SFTP par défaut. Avec -O, le transfert passe par l'ancien protocole SCP et [Sending command: scp -v -t] apparaît au même endroit.
scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 seconds📌 Options principales : résultats de cet article
| Option | Rôle | Résultat dans cet article | |
|---|---|---|---|
| -P | Indique le port de connexion SSH | Port 22 : envoi de report.txt terminé ; port fermé 2222 : fin sur [Connection timed out] | |
| -i | Indique le fichier de clé privée pour l'authentification par clé publique | Envoi de report.txt terminé en indiquant ~/.ssh/id_ed25519 | |
| -r | Copie les fichiers et sous-dossiers du dossier | Les dossiers css et images restent côté réception avec la structure d'origine ; sans cette option, l'erreur [not a regular file] empêche le transfert | |
| -p | Conserve la date de modification, la date d'accès et les permissions de la source | Date de modification conservée ; côté réception de cet article, la permission 600 n'a été conservée que pour le fichier envoyé avec -O -p | |
| -C | Compresse les données sur la connexion SSH | Pour le journal de 19MB entre les deux serveurs de cet article, l'envoi avec l'option a été un peu plus lent | |
| -l | Fixe la limite de vitesse de transfert en Kbit/s | Avec -l 8000, 20MB à 996.5KB/s en 20.82 secondes | |
| -v | Affiche le déroulement de la connexion au transfert sous forme de lignes debug1 | Transfert SFTP confirmé par la ligne [Sending subsystem: sftp] | |
| -3 | Transfère les données entre deux serveurs distants en passant par le serveur qui exécute la commande (méthode par défaut depuis OpenSSH 8.7) | Envoi de report.txt terminé avec deux dossiers du même serveur comme source et destination | |
| -O | Transfère avec l'ancien protocole SCP | [Sending command: scp -v -t] apparaît dans la sortie de -v ; les chemins avec espaces demandent une barre oblique inverse de plus | |
| -o | Transmet à ssh une option au format ssh_config | Attente fixée à 10 secondes avec ConnectTimeout=10 et [Connection timed out] confirmé |
📎 Autres options : selon le manuel officiel
| Option | Rôle | |
|---|---|---|
| -q | Désactive l'indicateur de progression ainsi que les avertissements et messages de diagnostic de ssh | |
| -J | Se connecte d'abord à un hôte de rebond, puis configure de là une redirection TCP vers la destination finale (forme abrégée du réglage ProxyJump ; séparez plusieurs sauts par des virgules) | |
| -F | Indique un autre fichier comme fichier de configuration utilisateur de ssh (transmis tel quel à ssh) | |
| -4 | Force l'utilisation des adresses IPv4 uniquement | |
| -6 | Force l'utilisation des adresses IPv6 uniquement |
3️⃣ Copier des dossiers avec scp et conserver les dates
Si vous indiquez un dossier sans option, scp affiche une erreur indiquant que ce n'est pas un fichier normal et n'effectue pas le transfert.
scp site-files user@203.0.113.10:~/scp-test/scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/Avec -r, les fichiers et les sous-dossiers du dossier sont copiés.
scp -r site-files user@203.0.113.10:~/scp-test/logo.png 100% 48KB 4.7MB/s 00:00
style.css 100% 15 5.0KB/s 00:00
index.html 100% 15 5.2KB/s 00:00La sortie n'affiche que les noms de fichiers. Dans la sortie de find côté réception, les dossiers css et images se trouvaient sous site-files avec la structure d'origine.
ssh user@203.0.113.10 'cd ~/scp-test && find site-files'site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css-r suit les liens symboliques du dossier et copie les fichiers d'origine : pour les dossiers où les liens doivent rester des liens, rsync -a convient mieux.
-p conserve la date de modification, la date d'accès et les permissions de la source. Avant l'envoi, nous avons réglé le fichier source report.txt sur la date de modification du 1er octobre 2026 00:00 (UTC) et les permissions 600. Comme le fuseau horaire du serveur de réception est UTC, ls côté envoi a également été exécuté avec TZ=UTC.
TZ=UTC ls -l report.txt-rw------- 1 root root 14 Oct 1 00:00 report.txtscp -p report.txt user@203.0.113.10:~/scp-test/report-p.txtreport.txt 100% 14 4.7KB/s 00:00scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txtreport.txt 100% 14 4.2KB/s 00:00ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'-rw------- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txtreport-p.txt, envoyé avec -p, et report-Op.txt, envoyé avec -O -p, ont conservé la date d'origine, tandis que report.txt, envoyé sans option, a été enregistré avec la date d'envoi. Sur le serveur de réception, les fichiers envoyés par SFTP ont été enregistrés avec les permissions 664 même avec -p, et seul le fichier envoyé avec l'ancien protocole SCP (-O) a conservé 600.
Pour les fichiers dont les permissions doivent être identiques à la source, vérifiez donc les permissions avec ls -l côté réception après l'envoi.
4️⃣ Indiquer le port et le fichier de clé avec scp
Pour les serveurs inaccessibles avec le port 22 et la clé par défaut, indiquez vous-même le port et la clé avant l'envoi. -P indique le port de connexion SSH et -i le fichier de clé privée pour l'authentification par clé publique.
Voici un exemple qui indique directement le port 22 et un fichier de clé. Sur un serveur dont le port a été changé, écrivez ce numéro à la place de 22.
scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.3KB/s 00:00Sans -i, comme ssh, scp essaie tour à tour les clés aux noms par défaut sous ~/.ssh (id_rsa, id_ecdsa, id_ed25519, etc.).
Si vous envoyez souvent vers le même serveur, écrivez un alias dans ~/.ssh/config et saisissez seulement cet alias dans scp.
Host myserver
HostName 203.0.113.10
User user
Port 22
IdentityFile ~/.ssh/id_ed25519Le nom de la ligne Host devient l'alias, et les quatre lignes en dessous remplacent l'adresse du serveur, le compte, le port et le fichier de clé. La commande avec le seul alias s'est terminée par le même résultat d'une ligne qu'avec l'adresse et la clé complètes.
scp report.txt myserver:~/scp-test/report.txt 100% 14 4.2KB/s 00:00-P, -i et les alias utilisent tels quels les réglages de connexion ssh : la création d'une clé et son enregistrement sur le serveur se font donc comme pour une connexion avec la commande SSH.
5️⃣ Copie entre serveurs avec scp
Même lorsque la source et la destination sont toutes deux des serveurs distants, une seule ligne de scp suffit. Depuis OpenSSH 8.7, les données transitent par le serveur qui exécute la commande, et cette méthode est -3. Les notes de version officielles justifient ce changement par défaut par le fait qu'il n'est plus nécessaire de placer les identifiants du serveur de destination sur le serveur source.
La mesure ci-dessous a été effectuée avec deux dossiers du même serveur comme source et destination. Si le serveur de destination est différent, changez seulement le compte et l'adresse à la fin.
scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/report.txt 100% 14 2.5KB/s 00:00C'est comme si le siège recevait les documents échangés entre deux agences pour les renvoyer ensuite.
L'ancienne méthode, où le serveur source envoie directement au serveur de destination, s'indique avec -R. Elle exige que le serveur source puisse se connecter au serveur de destination sans mot de passe. À partir d'OpenSSH 10.6, -R affiche un avertissement d'abandon prévu, et les versions suivantes devraient ignorer cette option et copier selon la méthode -3.
6️⃣ Comparaison de scp et rsync
Pour envoyer quelques fichiers une fois, scp suffit ; pour synchroniser régulièrement le même dossier ou reprendre un transfert interrompu, préférez la commande rsync. scp renvoie tous les fichiers indiqués à chaque exécution, tandis que rsync compare la source et la destination et ne transfère que les fichiers modifiés.
| Catégorie | scp | rsync |
|---|---|---|
| Portée du transfert | Tous les fichiers indiqués à chaque exécution | Uniquement les fichiers modifiés par rapport à la source |
| Conserver les fichiers partiellement reçus (--partial) | ❌ | ✅ |
| Supprimer les fichiers absents de la source (--delete) | ❌ | ✅ |
| Liens symboliques | Les suit et copie les fichiers d'origine | Liens conservés avec -a |
| Requis côté réception | Accès SSH et serveur SFTP | rsync installé des deux côtés |
7️⃣ Messages d'erreur de la commande scp et solutions
Quand scp échoue, la cause apparaît directement sur la première ligne de la sortie. Dans les trois cas où nous avons provoqué volontairement une erreur (fichier absent, droit d'écriture, mauvais port), la cause figurait sur la première ligne et le code de sortie n'était jamais 0.
🔲 No such file or directory
Si vous essayez de récupérer un fichier absent du côté distant, [No such file or directory] s'affiche avec le chemin.
scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/scp: ~/scp-test/nofile.txt: No such file or directoryÀ l'envoi, la même erreur se produit si le dossier de destination n'existe pas. scp ne crée pas les dossiers manquants : exécutez donc d'abord mkdir -p via ssh pour créer le dossier.
scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/🔲 Permission denied
Si le dossier côté réception n'a pas le droit d'écriture, [Permission denied] suit [dest open]. Voici le résultat d'un envoi vers un dossier readonly aux permissions 555.
scp report.txt user@203.0.113.10:~/scp-test/readonly/scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/Si [compte@adresse du serveur:] précède [Permission denied] et qu'une méthode d'authentification comme publickey figure entre parenthèses, la connexion a été refusée à l'étape d'authentification. Ce message est le format utilisé par le programme ssh en cas d'échec d'authentification : vérifiez d'abord le fichier de clé indiqué avec -i et la clé publique enregistrée sur le serveur.
🔲 Connection timed out
Si le numéro de port est erroné ou si un pare-feu bloque ce port et qu'aucune réponse n'arrive, scp attend la connexion puis se termine par [Connection timed out]. Voici le résultat d'un envoi vers le port fermé 2222 avec une attente de 10 secondes.
scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closedFace à cette erreur, vérifiez d'abord que le numéro indiqué à -P correspond au port SSH du serveur.
🔲 Espaces et tilde (~) dans les chemins
Avec le scp actuel, qui transfère par SFTP, il suffit d'entourer une seule fois de guillemets simples un chemin distant contenant des espaces.
scp report.txt 'user@203.0.113.10:~/scp-test/my files/'report.txt 100% 14 4.7KB/s 00:00En ajoutant -O à la même commande pour envoyer avec l'ancien protocole SCP, l'envoi a échoué avec [ambiguous target]. En effet, avec l'ancien protocole SCP, le shell distant interprète le chemin une fois de plus.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'scp: ambiguous targetDans ce cas, placez une barre oblique inverse devant l'espace pour que le shell distant le lise aussi comme un seul mot.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'report.txt 100% 14 4.5KB/s 00:00Si le chemin après les deux-points ne commence ni par une barre oblique ni par un tilde, il est traité par rapport au dossier personnel du compte distant.
scp report.txt user@203.0.113.10:scp-test/report-rel.txtreport.txt 100% 14 5.6KB/s 00:00Le manuel officiel indique d'utiliser -O lorsqu'un ancien serveur SFTP ne parvient pas à convertir en dossier personnel un chemin commençant par un tilde. Dans ce cas, un chemin relatif au dossier personnel sans tilde, comme ci-dessus, enregistre aussi au même endroit.
🔢 FAQ & contenus recommandés











ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.