16 commandes SCP courantes avec des exemples pour copier des fichiers et des dossiers
Le protocole SCP est intrinsèquement lié à SSH, partageant une origine conceptuelle commune.
En tant qu'extension du protocole SSH, SCP garantit la confidentialité et l'intégrité des données lors de leur transmission. Les données sont donc protégées contre toute altération ou écoute non autorisée durant leur transfert.
Explorons d'abord le fonctionnement de SCP, avant de détailler les commandes associées.
Qu'est-ce que SCP ?
SCP, acronyme de Secure Copy Protocol, désigne un protocole de copie sécurisée.
Il s'agit d'une méthode sûre et efficace pour transférer des fichiers et des répertoires entre des hôtes, qu'ils soient locaux, distants ou entre deux serveurs distants.
SCP est largement adopté pour le transfert sécurisé de données au sein d'un réseau. Il s'appuie sur le protocole SSH (Secure Shell) pour établir une connexion protégée et chiffrer les données durant la transmission.
Que vous ayez à déplacer un seul fichier ou un répertoire complet, SCP offre une solution fiable pour les transferts de données à distance.
Comment fonctionne SCP ?
SCP repose sur le protocole SSH, un protocole réseau cryptographique utilisé pour les connexions à distance sécurisées et l'exécution de commandes. Il utilise les mêmes mécanismes de sécurité que SSH, incluant le chiffrement et l'authentification, pour préserver la confidentialité des données pendant leur transmission.
Lorsqu'un utilisateur utilise SCP, il émet une commande de copie sur son système local, en précisant le fichier source et son emplacement de destination sur un serveur distant. SCP établit une connexion SSH avec ce serveur, puis copie les fichiers de la source vers la destination de manière sécurisée.
Quand utiliser SCP ?

SCP se révèle particulièrement pertinent dans les situations suivantes.
Sauvegarde de serveurs distants
SCP permet de sauvegarder les données d'un serveur distant vers votre machine locale, ou inversement. Ceci assure la redondance des données et facilite la reprise après sinistre.
Déploiement d'applications
Il facilite le déploiement d'applications sur plusieurs serveurs en copiant les fichiers nécessaires sur chaque système cible, garantissant ainsi un transfert sécurisé et fiable.
Transfert de fichiers volumineux
SCP propose une méthode sûre et alternative pour le transfert de gros fichiers, qui seraient trop volumineux pour être transmis en pièces jointes.
Partage de fichiers sécurisé
SCP assure le chiffrement des données pendant le transfert, ce qui est essentiel lors de l'envoi de fichiers confidentiels à d'autres personnes.
Collaboration à distance
SCP peut servir à partager des fichiers de manière sécurisée avec des collaborateurs ou des membres d'équipe travaillant à différents emplacements.
Syntaxe de la commande SCP
Avant d'utiliser SCP, familiarisons-nous avec sa syntaxe fondamentale.
Voici la syntaxe de base de la commande SCP :
scp [options] [source] [destination]
Explication de la syntaxe :
Options
Ce sont des paramètres optionnels qui modifient le comportement de SCP. Plusieurs options permettent de personnaliser le processus de transfert. Voici quelques options courantes :
-r : copie récursivement les répertoires et leur contenu.
-p : préserve les autorisations, les dates et les modes du fichier d'origine.
-P : spécifie le numéro de port pour la connexion SSH.
-i : indique le fichier de clé privée pour l'authentification SSH.
-C : active la compression pour accélérer le transfert des données.
-l : limite la bande passante utilisée pour le transfert (en Kbit/s).
-v : mode verbeux, affiche les messages de débogage lors du transfert.
-o : passe une option au client SSH. Cela peut être utilisé pour désactiver la vérification stricte de la clé de l'hôte.
Source
La source désigne le fichier ou le répertoire que vous désirez copier. Cela peut être un chemin local ou distant, en fonction du contexte.
Destination
La destination précise l'endroit où vous voulez copier la source. Similairement à la source, cela peut être un chemin local ou distant.
Exemples de commandes
#1. Copier un fichier du serveur local vers un serveur distant
scp /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
/chemin/vers/fichier_local.txt : c'est le fichier source que vous souhaitez copier à partir de votre machine locale.
utilisateur@serveur_distant : remplacez "utilisateur" par le nom de l'utilisateur distant et "serveur_distant" par le nom d'hôte ou l'adresse IP du serveur distant.
/chemin/vers/destination/ : c'est le chemin de destination sur le serveur distant où le fichier sera copié.
Exemple
Dans mon cas, j'ai choisi un serveur distant pour transférer le fichier.
Nom d'utilisateur de l'hôte distant : abhishekvarma
Adresse de l'hôte distant : 192.168.29.70
scp /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Lors de la connexion à un serveur distant, le système demande le mot de passe. Ici, j'ai sélectionné un fichier zip à copier.
Sortie

Si la connexion au serveur distant s'effectue sans erreur, la sortie ressemblera à ceci.
exemple.zip 100% 20KB 717.9KB/s 00:00
#2. Copier un fichier de la machine distante vers la machine locale
scp utilisateur@serveur_distant:/chemin/vers/fichier_distant.txt /chemin/vers/destination_locale/
Comme précédemment, remplacez l'utilisateur et l'adresse de l'hôte distant.
Exemple
scp [email protected]:/Users/abhishekvarma/Bureau/exemple.zip /home/vboxuser/Bureau
Sortie

Voici un exemple de sortie dans mon cas. Le temps varie en fonction de la vitesse de la connexion.
exemple.zip 100% 20KB 51.2KB/s 00:00
#3. Copier un répertoire de manière récursive
scp -r utilisateur@serveur_distant:/chemin/vers/fichier_distant.txt /chemin/vers/destination_locale/
Ici, le paramètre `-r` indique à SCP de copier les répertoires de manière récursive (y compris les sous-répertoires et leur contenu).
Exemple
scp -r /home/vboxuser/Bureau [email protected]:/Users/abhishekvarma/Bureau
Ici, j'ai spécifié l'intégralité du répertoire pour copier les fichiers.
Sortie

exemple.zip 100% 20KB 1.0MB/s 00:00 Capture d'écran du 2023-08-13 21-45-23.png 100% 27KB 1.5MB/s 00:00 .swp 100% 12KB 894.2KB/s 00:00 .help.swp 100% 12KB 780.4KB/s 00:00
#4. Copier des fichiers correspondant à un motif
scp /chemin/vers/fichier_local/*.txt utilisateur@serveur_distant:/chemin/vers/destination/
*.txt : Il s'agit d'un motif générique qui correspond à tous les fichiers ayant l'extension .txt dans le répertoire local spécifié. Les chemins source et destination sont les mêmes que précédemment.
Exemple
scp /home/vboxuser/Bureau/repertoire_local/*.png [email protected]:/Users/abhishekvarma/Bureau
Sortie

Ici, j'ai utilisé l'extension .png.
Capture d'écran du 2023-08-13 21-45-23.png 100% 27KB 1.4MB/s 00:00 Capture d'écran du 2023-08-13 21-55-28.png 100% 24KB 1.7MB/s 00:00 Capture d'écran du 2023-08-13 22-04-03.png 100% 38KB 2.1MB/s 00:00
#5. Conserver les attributs de fichier
scp -p /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
Ici, le paramètre `-p` préserve les dates de modification, les dates d'accès et les modes du fichier source lors de la copie.
Exemple
scp -p /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

exemple.zip 100% 20KB 420.0KB/s 00:00
#6. Spécifier un port SSH différent
scp -P 22 /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
Le paramètre `-P` spécifie un autre port SSH (22 dans ce cas) pour la connexion SCP. Vous pouvez utiliser n'importe quel port de votre choix.
Exemple
scp -P 22 /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

exemple.zip 100% 20KB 1.2MB/s 00:00
#7. Copie avec compression
scp -C /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
Le paramètre `-C` active la compression pendant le transfert, ce qui peut réduire la taille des données transférées. L'adresse source et destination sont les mêmes que précédemment.
Exemple
scp -C /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

exemple.zip 100% 20KB 985.8KB/s 00:00
#8. Sortie détaillée pour le débogage
scp -v /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
L'option `-v` active la sortie détaillée, fournissant plus d'informations pendant le processus de transfert.
Exemple
scp -v /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

La sortie ressemblera à ceci.
Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -t /Users/abhishekvarma/Bureau OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established. debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1
#9. Copier de distant à local avec une sortie détaillée
scp -v utilisateur@serveur_distant:/chemin/vers/fichier_distant.txt /chemin/vers/destination_locale/
Mêmes explications que l'exemple détaillé précédent, mais avec les rôles des emplacements locaux et distants inversés.
Exemple
scp -v [email protected]:/Users/abhishekvarma/Bureau/exemple.zip /home/vboxuser/Bureau
Sortie

La sortie ressemblera à ceci.
Executing: program /usr/bin/ssh host 192.168.29.70, user abhishekvarma, command scp -v -f /Users/abhishekvarma/Bureau/exemple.zip OpenSSH_8.9p1 Ubuntu-3ubuntu0.3, OpenSSL 3.0.2 15 Mar 2022 debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.29.70 [192.168.29.70] port 22. debug1: Connection established. debug1: identity file /root/.ssh/id_rsa type -1 debug1: identity file /root/.ssh/id_rsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa type -1 debug1: identity file /root/.ssh/id_ecdsa-cert type -1 debug1: identity file /root/.ssh/id_ecdsa_sk type -1 debug1: identity file /root/.ssh/id_ecdsa_sk-cert type -1
#10. Copier en utilisant une clé SSH différente
scp -i /chemin/vers/cle_privee.pem /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
Le paramètre "-i /chemin/vers/cle_privee.pem" indique une autre clé privée SSH pour l'authentification.
Exemple
scp -i /chemin/vers/cle_privee.pem /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

Si vous avez une clé privée, vous pouvez l'utiliser. Sinon, vous pouvez utiliser celle par défaut.
exemple.zip 100% 20KB 1.1MB/s 00:00
#11. Copier plusieurs fichiers vers le serveur distant
scp fichier1.txt fichier2.txt utilisateur@serveur_distant:/chemin/vers/destination/
Cette commande copie fichier1.txt et fichier2.txt du répertoire local vers la destination spécifiée sur le serveur distant.
Exemple
scp /home/vboxuser/Bureau/image.png /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

image.png 100% 39KB 1.4MB/s 00:00 exemple.zip 100% 20KB 1.5MB/s 00:00
#12. Copier un fichier distant en lui donnant un autre nom
scp utilisateur@serveur_distant:/chemin/vers/fichier_distant.txt /chemin/vers/fichier_local_avec_nouveau_nom.txt
Cette commande copie fichier.txt du serveur distant vers le répertoire local, en le renommant fichier_local_avec_nouveau_nom.txt durant le processus.
Exemple
scp [email protected]:/Users/abhishekvarma/Bureau/exemple.zip /home/vboxuser/Bureau/nouveaufichier.zip
Sortie

L'ancienne et la nouvelle extension de fichier doivent être identiques pour que la commande fonctionne.
exemple.zip 100% 20KB 28.7KB/s 00:00
#13. Copie avec une limite de bande passante spécifique
scp -l 1000 /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
Le paramètre `-l` spécifie une limite de bande passante en Kbit/s (1000 Kbit/s dans ce cas) pour le transfert.
Exemple
scp -l 300 /home/vboxuser/Bureau/exemple.zip [email protected]:/Users/abhishekvarma/Bureau
Sortie

exemple.zip 100% 20KB 31.3KB/s 00:00
#14. Copier des fichiers en conservant les liens symboliques
scp -rp /chemin/vers/source_locale/ utilisateur@serveur_distant:/chemin/vers/destination/
Le paramètre `-p` préserve les attributs de fichier et le paramètre -r copie récursivement les répertoires. Cette commande préserve aussi les liens symboliques durant la copie.
Exemple
scp -rp /home/vboxuser/Bureau/image.png [email protected]:/Users/abhishekvarma/Bureau
Sortie

image.png 100% 39KB 1.8MB/s 00:00
#15. Copie détaillée de fichiers avec compression
scp -vC /chemin/vers/fichier_local.txt utilisateur@serveur_distant:/chemin/vers/destination/
Cette commande combine la sortie détaillée (-v) et la compression (-C) pendant le transfert de fichier.
Exemple
scp -vC /home/vboxuser/Bureau/image.png [email protected]:/Users/abhishekvarma/Bureau
Sortie

La sortie ressemblera à ceci.
scp: debug1: fd 3 clearing O_NONBLOCK Sending file modes: C0664 40050 image.png Sink: C0664 40050 image.png image.png d 6 clearing O_NONBLOCK scp: debug1: fd • clearing O_NONBLOCK image.png debug1: client_input_channel_req: channel ✪ type exit-status reply debug1: channel 0: free: client-session, channels 1 Transferred: sent 40220, received 2576 bytes, in 0.1 seconds Bytes per second: sent 352570.0, received 22581.3 root@ubuntu: ~ debug1: Exit status 0 debug1: compress outgoing: raw data 40287, compressed 38198, factor 0.95 debug1: compress incoming: raw data 792, compressed 757, factor 0.96
#16. Copie entre deux serveurs distants
Si vous souhaitez transférer des fichiers d'un serveur distant à un autre, vous pouvez utiliser cette commande.
scp utilisateur1@serveur_distant1:/chemin/vers/fichier_distant.txt utilisateur2@serveur_distant2:/chemin/vers/destination/
Cette commande transfère directement fichier.txt de serveur_distant1 vers serveur_distant2.
Exemple
scp utilisateur1@serveur_distant1:/chemin/vers/fichier_distant.txt <a href="https://wilku.top/cdn-cgi/l/email-protection" class="__