Exemples scp : copier des fichiers et des dossiers via SSH

Pour envoyer un fichier, lancez scp file.txt user@server:/tmp/. Pour en télécharger un, lancez scp user@server:/tmp/file.txt .. Ajoutez -r pour copier un dossier et -P 2222 pour un autre port, avec un P majuscule. Un chemin distant exige les deux-points : sans eux, scp traite le nom comme un fichier local.

Mis à jour le . scp d'OpenSSH 10.3 sur macOS vers OpenSSH 10.0 sur Debian 13 dans un conteneur jetable.

Exemples courants

TâcheCommande
Envoyer un fichierscp report.pdf user@server:/tmp/
Télécharger un fichierscp user@server:/tmp/report.pdf .
Télécharger sous un autre nomscp user@server:/tmp/report.pdf copy.pdf
Envoyer un dossierscp -r site user@server:/tmp/
Télécharger le contenu d'un dossierscp -r 'user@server:/tmp/site/*' dl/
Un autre portscp -P 2222 file user@server:/tmp/
Utiliser une clé précisescp -i ~/.ssh/id_work file user@server:/tmp/
Conserver les dates et les modesscp -p file user@server:/tmp/
Limiter le débit, en Kbit/sscp -l 800 file user@server:/tmp/
Compresserscp -C file user@server:/tmp/
Via un hôte de rebondscp -J user@jump file user@server:/tmp/

Une entrée Host dans ~/.ssh/config fonctionne aussi ici : scp file server:/tmp/. Voir le fichier de configuration SSH.

La ligne avec -J passe par un hôte de rebond. Pour enregistrer ce chemin une fois pour toutes, voir ProxyJump et les hôtes de rebond.

Copier deux fois un dossier l'imbrique

Si le dossier de destination existe déjà, scp -r place le dossier à l'intérieur. Avec /tmp/site déjà présent sur le serveur, cette commande nous a donné /tmp/site/site :

scp -r site user@server:/tmp/site

Ainsi, une première exécution crée /tmp/site, et une seconde crée /tmp/site/site. Pour copier un dossier à répétition, utilisez plutôt rsync.

Noms contenant des espaces

scp "my file.txt" "user@server:/tmp/my file.txt"

Cela fonctionne avec le protocole SFTP par défaut. Avec l'ancien protocole d'-O, la même ligne a échoué avec scp: ambiguous target, car le côté distant relit le nom. Dans ce cas, ajoutez une seconde paire de guillemets :

scp -O "my file.txt" 'user@server:"/tmp/my file.txt"'

Entre deux serveurs

scp -3 user@one:/tmp/file user@two:/tmp/

-3 fait passer les données par votre machine : aucun des serveurs n'a donc besoin d'un accès à l'autre. Depuis OpenSSH 8.7, c'est le comportement par défaut : l'option ne fait que le rendre explicite. Dans notre essai, une copie sans -3 passait aussi par le client local.

Pour que le premier serveur se connecte directement au second, utilisez -R :

scp -R user@one:/tmp/file user@two:/tmp/

Le premier serveur doit alors se connecter au second sans invite, et connaître déjà sa clé d'hôte. Sinon, vous obtenez Host key verification failed., ce qui est arrivé dans notre essai.

-O : l'ancien protocole

Depuis OpenSSH 9.0, scp utilise le protocole SFTP par défaut. Vous pouvez le voir avec scp -v, qui affiche Sending subsystem: sftp. Avec -O, il affiche Sending command: scp -v -t /tmp/.

scp -O file user@server:/tmp/

Il faut -O quand l'autre côté n'a pas de sous-système SFTP, comme certains équipements embarqués. L'erreur habituelle est alors subsystem request failed on channel 0. Voir le guide de cette erreur.

Ce que scp ne fait pas

  • Il ne reprend pas un transfert interrompu. Relancez-le et il repart de zéro.
  • Il n'envoie pas seulement ce qui a changé.

Pour cela, utilisez rsync, ou reget dans sftp. Pour une comparaison complète, lisez scp, SFTP ou rsync.

Questions

Comment copier un dossier avec scp ?

Ajoutez -r : scp -r dossier user@server:/tmp/. Si le dossier de destination existe déjà, scp place le dossier à l'intérieur.

Comment utiliser scp avec un autre port ?

Avec -P majuscule, par exemple scp -P 2222 file user@server:/tmp/. Le -p minuscule conserve les dates et les droits des fichiers.

scp peut-il reprendre un transfert interrompu ?

Non. Relancé, il recommence le fichier depuis le début. Utilisez rsync avec --partial, ou reget et reput dans sftp.

Sources

Autres guides : SFTP et transfert de fichiers

Tous les guides