Comment utiliser la commande scp pour transférer des fichiers en toute sécurité sous Linux

Supposons que vous souhaitiez transférer des fichiers entre des serveurs sur un système Linux. Il existe de nombreuses façons d'accomplir cette tâche,
Comment utiliser la commande scp pour transférer des fichiers en toute sécurité sous Linux

Supposons que vous souhaitiez transférer des fichiers entre des serveurs sur un système Linux. Il existe de nombreuses façons d'accomplir cette tâche, mais si votre priorité est de transférer des fichiers en toute sécurité, il ne vous reste que quelques options. 

La solution la plus simple consiste à utiliser la commande scp ou secure copy pour transférer vos fichiers sans vous soucier de la sécurité. Dans cet article, nous allons vous expliquer comment utiliser la commande scp pour transférer des fichiers en toute sécurité sur votre système Linux.

Qu'est-ce que la commande scp sous Linux ?

Lorsqu'il s'agit de transférer des fichiers sur un réseau sécurisé, la commande scp peut s'avérer très utile. Elle signifie Secure Copy Protocol (protocole de copie sécurisée) et transfère des fichiers et des répertoires entre deux systèmes via une connexion SSH (Secure Shell). Avec ssh, vous pouvez être assuré de la sécurité de vos fichiers car ils sont cryptés par défaut. En termes plus simples, la commande scp est une version plus sécurisée de la commande cp, que vous pouvez découvrir dans notre article sur les commandes du terminal Linux.

Comment utiliser la commande scp : Syntaxe et options

Avant de transférer des fichiers via scp, voyons la syntaxe et les options de la commande ici :

scp <option> <nom_utilisateur_hôte@adresse_ip_hôte:chemin/vers/fichier source> <nom_utilisateur_cible@adresse_ip_cible:chemin cible>

Comprendre la syntaxe :

  1. Premièrement, <nom_de_l'utilisateur_hôte@adresse_ip_hôte:chemin/vers/fichier/source> spécifie le système "source" à partir duquel vous devez transférer vos fichiers/répertoires.
  2. Deuxièmement, <nom_utilisateur_cible@adresse_ip_cible:cible/chemin> spécifie le système "cible" vers lequel vous souhaitez transférer vos fichiers/répertoires.

Si vous laissez l'un ou l'autre des paramètres ci-dessus, la commande scp de Linux cherchera d'abord le fichier, puis le copiera localement. Voici quelques-unes des options à associer à la commande :

Options Destination :

-P Spécifie le port de connexion avec le système hôte. S'il est omis, le port 22 est utilisé par défaut.

-p Préserve les temps de modification, les temps d'accès et les modes du fichier d'origine lorsqu'il est copié sur le système cible.

-r Copie l'intégralité du répertoire sur le système cible de manière récursive.

-J Permet de connecter le système source et le système cible via un système proxy (jump host).

-3 lorsque ce drapeau est utilisé, il copie les fichiers à la fois sur le système cible et sur le système local

-4 oblige la commande scp à n'utiliser que des adresses IPv4.

-6 oblige la commande scp à n'utiliser que des adresses IPv6.

Comment copier des fichiers à l'aide de la commande scp

Avant d'utiliser la commande scp sous Linux, vous devez remplir certaines conditions préalables sur le système hôte et le système cible :

  • ssh doit être installé
  • accès root ou tout utilisateur disposant des privilèges sudo

Copier des fichiers d'un hôte local vers une cible distante

Si vous avez un fichier à transférer de votre système local vers une cible distante, vous devez utiliser la syntaxe suivante :

scp <options> <chemin_vers_le_fichier_local> <utilisateur_à_distance>@<adresse_ip_de_la_cible_à_distance>:<chemin_vers_le_magasin_de_la_destination_à_distance>.

Si la syntaxe ci-dessus vous semble compliquée, un exemple vous éclairera :

scp test.txt remote2@139.144.11.105:/home/remote2/Documents/

Dans l'exemple ci-dessus :

  • test.txt est le nom du fichier à transférer et il est situé dans le répertoire courant du système local.
  • test est le nom d'utilisateur sur le système cible.
  • 139.144.11.105 est l'adresse IP du système cible.
  • /home/remote2/Documents/ est l'emplacement sur le système cible où le fichier transféré sera sauvegardé.

Copier des fichiers d'un hôte distant vers une cible locale

Si vous devez transférer un fichier d'un hôte distant vers votre machine locale, utilisez la syntaxe suivante de la commande scp sur votre système Linux :

scp <options> <utilisateur_distant>@<adresse_ip_de_l'hôte_distant>:<chemin_du_fichier_à_transférer> <chemin_du_fichier_store>

Par exemple, supposons que vous ayez besoin de transférer un fichier nommé test.py depuis le serveur distant sur lequel vous travaillez, utilisez cette commande :

scp test@10.10.11.113:/home/test/test1.py ~/test1.py

Dans cet exemple, test est le nom d'utilisateur de l'hôte distant :

  • test est le nom d'utilisateur de l'hôte distant.
  • 10.10.11.113 est l'adresse IP de l'hôte distant.
  • /home/test/test1.py est le chemin du fichier à transférer depuis l'hôte distant.
  • ~/test1.py est le nom du fichier après son transfert sur la machine locale et son stockage dans le répertoire personnel.

Transférer des fichiers d'un hôte distant vers une autre cible distante

Avec la commande scp, vous pouvez non seulement transférer des fichiers entre votre système local et une machine distante, mais aussi entre deux systèmes distants. Mais avant de pouvoir transférer des fichiers d'un système distant à un autre système distant, il est recommandé de générer une clé ssh privée et une clé ssh publique sur le système source et de stocker une copie de la clé publique sur le système de destination.

En général, les utilisateurs se plaignent de l'erreur "Host key verification failed" lorsqu'ils transfèrent des fichiers entre deux systèmes distants. Pour contourner l'erreur, utilisez une clé ssh comme mesure supplémentaire. Nous vous expliquons ici comment procéder :

1. Générez une paire de clés publiques/privées sur le serveur source à l'aide de cette commande :

ssh-keygen -t <algorithme_de_chiffrement>.

2. Pour les algorithmes de chiffrement, vous pouvez utiliser "rsa", qui est l'algorithme le plus couramment utilisé, ou tout autre algorithme de votre choix.

3. Il vous sera ensuite demandé de choisir l'emplacement de stockage de la clé ssh. Vous pouvez la stocker à l'emplacement de votre choix ou à l'emplacement par défaut.

4. Pour la phrase de passe, vous pouvez entrer ce que vous voulez ou laisser le champ vide en appuyant sur Entrée.

5. Copiez ensuite la clé publique sur le serveur de destination à l'aide de la commande ci-dessous. Vous pourrez ainsi vous connecter au système de destination sans mot de passe à l'aide de ssh.

ssh-copy-id <destination_username>@<destination_ip_address>

Remarque : la méthode de connexion sans mot de passe ne fonctionnera que pour l'utilisateur pour lequel vous avez généré la clé ssh.

6. Une fois que vous avez créé et stocké la clé ssh sur le serveur distant, utilisez la syntaxe de la commande scp pour échanger des fichiers entre deux systèmes distants fonctionnant sous Linux :

scp <options> <remote_user_1>@<remote_host_ip_address>:<chemin_du_fichier_à_transférer> <remote_user_2>@<remote_target_ip_address>:<chemin_du_stockage_dans_la_destination_de_la_distribution>.

Transférer un fichier entre deux systèmes distants - commande scp linux

Supposons que vous ayez besoin de transférer un fichier nommé test.txt d'un hôte distant à un autre récepteur distant, utilisez la commande :

scp remote1@10.10.11.113:/home/test1/test.txt remote2@10.11.27.111:/home/remote2/Documents/test1.txt

Dans cet exemple :

  • remote1 est le nom de l'utilisateur de l'hôte émetteur distant
  • 10.10.11.113 est l'adresse IP de l'hôte émetteur distant
  • /home/test1/test.txt est le chemin d'accès au fichier à envoyer
  • remote2 est le nom de l'utilisateur dans la cible du récepteur distant
  • 10.11.27.111 est l'adresse IP de la cible du récepteur distant
  • /home/remote2/Documents/test1.txt est le nom et le chemin à enregistrer pour le fichier à recevoir.

Transfert de plusieurs fichiers à l'aide de la commande scp

Transférer plusieurs fichiers un par un peut être une tâche fastidieuse. Au lieu de cela, vous pouvez utiliser la syntaxe ci-dessous pour échanger des fichiers à l'aide de la commande scp sous Linux :

scp <chemin_vers_fichier_1> <chemin_vers_fichier_2> <récepteur_à_distance>@<adresse_ip_cible_à_distance>:<chemin_vers_magasin_à_destination>

Supposons que vous ayez besoin d'envoyer quatre fichiers, dont test1.txt, test2.py, test3.sh et test4.c, à un récepteur distant, vous pouvez utiliser la commande ci-dessous :

scp -P 22 test1.txt test2.py test3.sh test4.c remote1@10.10.11.113:/home/remote_1/Documents

Voyons comment fonctionne la commande de l'exemple et ce qu'elle fait :

  • -p 2222 est utilisé pour spécifier la connexion via le port 22
  • test1.txt test2.py test3.sh test4.c sont les noms des fichiers à transférer
  • remote_1 est le nom d'utilisateur du système récepteur
  • 10.10.11.113 est l'adresse IP du récepteur
  • /home/remote_1/Documents désigne le chemin d'accès au fichier reçu.

Vous pouvez même utiliser des caractères génériques pour envoyer plusieurs fichiers avec la même extension, comme indiqué ci-dessous :

scp <wildcard>.<extension> <remote_receiver>@<remote_target_ip_address>:<path_to_store_in_remote_destination>

Par exemple, si vous devez envoyer tous les fichiers .py à un serveur distant, utilisez la commande scp ci-dessous dans le terminal Linux :

scp *.py remote1@10.10.11.113:/home/remote_1/

Ici :

  • *.py signifie tous les fichiers python
  • remote1 est le nom d'utilisateur du destinataire
  • 10.10.11.113 est l'adresse IP du destinataire
  • /home/remote_1/ est l'emplacement où stocker le fichier reçu.

Questions fréquemment posées

Le transfert de fichiers SCP est-il sécurisé ?

Le Secure Copy Protocol ou scp est un protocole basé sur la technologie SSH qui utilise le cryptage et l'authentification pour l'échange de fichiers entre deux hôtes. Cela garantit une sécurité et une intégrité totales des données entre les deux hôtes.

Le protocole SCP est-il plus sûr que le protocole SFTP ?

Les protocoles SCP et SFTP sont tous deux équivalents en termes de sécurité. Le principal avantage de l'utilisation de scp par rapport à SFTP est la rapidité des transferts, particulièrement utile dans les réseaux à forte latence.