2023-08-15 04:20 Temps de lecture : 23 min

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="__
Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.