La commande scp permet de copier facilement et en toute sécurité des fichiers entre des ordinateurs Linux. Elle utilise la sécurité SSH, mais surtout, elle est simple. Si vous pouvez utiliser cp, vous pouvez utiliser scp.
COMMENT UTILISER LA COMMANDE SAR SOUS LINUX
Le protocole de copie sécurisée et scp
Définissons quelques termes : il y a SCP et il y a scp. La majuscule SCP signifie Secure Copy Protocol (protocole de copie sécurisée). La minuscule scp signifie secure cp. En d’autres termes, SCP est un protocole et scp est un programme.
scp a été conçu pour être un moyen sûr et sécurisé de copier des fichiers entre des ordinateurs Linux distants. Il utilise SSH pour établir des connexions sécurisées. SSH, ou secure shell, est un protocole réseau cryptographique souvent utilisé pour accéder et se connecter à des ordinateurs Linux distants. Sur les distributions Linux, la fonctionnalité SSH est fournie par OpenSSH.
SCP a un peu vieilli, et des inquiétudes ont été exprimées quant à son utilisation actuelle. Depuis la version 8.8 d’OpenSSH, SCP est considéré comme déprécié. Les implémentations modernes de scp utilisent par défaut le Secure File Transfer Protocol. SSH est toujours utilisé pour la connexion sécurisée, mais les transferts de fichiers sont gérés par SFTP. Tout cela est invisible et se passe comme par magie sous le capot, et la syntaxe de scp est restée la même.
Le programme rsync est préféré à scp , mais il se peut que vous rencontriez un ordinateur sur lequel rsync n’est pas installé, et pour lequel vous n’avez pas les privilèges root, ce qui signifie que vous ne pouvez pas l’installer. Pour copier des fichiers d’un ordinateur à l’autre sur un réseau autonome, scp est parfaitement adapté. Pour que scp fonctionne, vous devez faire fonctionner SSH sur tous les ordinateurs vers lesquels et depuis lesquels vous allez copier.
Pour connaître la version d’OpenSSH installée sur votre ordinateur, tapez :
ssh -V
Obtention de la version d’OpenSSH
Copie d’un seul fichier
Comme la commande cp standard, scp copie les fichiers de l’emplacement source vers l’emplacement cible. Pour copier un fichier sur un ordinateur distant, vous devez connaître l’adresse IP ou le nom de réseau de l’ordinateur distant. Vous devez également disposer des informations d’identification d’un compte utilisateur disposant de droits d’écriture pour l’emplacement vers lequel vous envoyez le fichier.
Pour envoyer un fichier appelé « sample.txt » à un ordinateur appelé « fedora-34 » sur le réseau local, la syntaxe est la suivante :
scp ./sample.txt [email protected]:/home/dave/Downloads/
Copie d’un seul fichier sur un ordinateur distant
La commande est composée de :
scp : La commande scp
./sample.txt : Le fichier que nous allons envoyer. Il se trouve dans le répertoire courant.
dave@ : Le compte utilisateur sur l'ordinateur distant auquel nous allons envoyer le fichier.
fedora-34.local : Le nom de réseau de l'ordinateur distant.
:/home/dave/Downloads/ : L'emplacement vers lequel copier le fichier sur l'ordinateur distant. Notez les deux points " :" qui séparent le nom de l'ordinateur et le chemin d'accès.
Vous serez invité à saisir le mot de passe du compte sur l’ordinateur distant, puis le fichier sera copié.
Si vous souhaitez que le fichier porte un nom différent sur l’ordinateur distant, vous pouvez ajouter un nom de fichier au chemin cible. Pour copier le même fichier et le nommer « different-file.txt », utilisez cette syntaxe :
scp ./sample.txt [email protected]:/home/dave/Downloads/different-file.txt
Copie d’un seul fichier sur un ordinateur distant avec un nouveau nom
La commande scp écrase silencieusement les fichiers existants, faites donc attention lorsque vous copiez des fichiers. Si un fichier existe déjà sur l’ordinateur cible avec le même nom que le fichier que vous copiez, il sera écrasé et perdu.
Si l’ordinateur cible n’utilise pas le port SSH par défaut de 22, vous pouvez utiliser l’option -P (numéro de port) pour fournir le numéro de port approprié.
Récupération d’un seul fichier
Pour copier un fichier à partir d’un serveur distant, il suffit de définir le serveur distant comme source et de définir le chemin d’accès local où vous souhaitez copier le fichier comme cible. Nous allons copier un fichier appelé « development-plan.md » depuis l’ordinateur distant vers le répertoire courant de l’ordinateur local.
scp [email protected]:/home/dave/Downloads/development-plan.md .
Copie d’un seul fichier depuis un serveur distant vers le répertoire courant de l’ordinateur local
Si vous ajoutez un nom de fichier au chemin d’accès local, le fichier est copié et reçoit ce nom.
scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md
Copie d’un seul fichier depuis un serveur distant vers le répertoire actuel de l’ordinateur local avec un nouveau nom
Le fichier est copié mais renommé avec le nom de fichier spécifié.
ls -hl *.md
Copie de plusieurs fichiers
Il est facile de copier plusieurs fichiers dans les deux sens. Vous pouvez lister autant de fichiers sources que vous le souhaitez. Ici, nous copions deux fichiers markdown et un fichier CSV.
scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Downloads/
Copie de plusieurs fichiers nommés sur un ordinateur distant
Les trois fichiers sont copiés sur l’ordinateur distant. Vous pouvez également utiliser des caractères génériques. Cette commande fait exactement la même chose que la dernière commande.
scp ./dp. [email protected]:/home/dave/Downloads/
Copie de plusieurs fichiers sur un ordinateur distant à l’aide de caractères génériques dans le nom de fichier
Copie récursive de répertoires
L’option -r (récursive) vous permet de copier des arborescences entières de répertoires avec une seule commande. Nous avons placé deux fichiers dans un répertoire appelé « data » et créé un répertoire appelé « CSV » à l’intérieur du répertoire « data ». Nous avons placé un fichier CSV dans le répertoire « data/CSV ».
Cette commande copie les fichiers et recrée la structure du répertoire sur l’ordinateur distant.
scp -r ./data [email protected]:/home/dave/Downloads/
Copie d’une arborescence de répertoires sur un ordinateur distant
Copie de fichiers entre serveurs distants
Vous pouvez même demander à scp de copier des fichiers d’un serveur distant à un autre. La syntaxe est assez simple. Vous fournissez le nom de compte et l’adresse réseau du serveur source et le nom de compte et l’adresse réseau du serveur cible. Les fichiers sont copiés depuis le serveur source et copiés à l’emplacement sur le serveur cible.
Bien que la syntaxe soit simple, s’assurer que tout le reste est en place demande un peu plus de réflexion. De toute évidence, l’emplacement vers lequel vous essayez de copier les fichiers sur le serveur distant doit être accessible par le compte utilisateur que vous spécifiez sur la ligne de commande. Et ce compte utilisateur doit avoir les droits d’écriture sur cet emplacement.
Une condition préalable plus subtile est que l’accès SSH doit être configuré entre votre ordinateur local et l’ordinateur source, ainsi qu’entre les serveurs source et cible. Assurez-vous que vous pouvez utiliser SSH pour vous connecter au serveur cible à partir du serveur source. Si vous ne pouvez pas le faire, scp ne pourra pas se connecter.
La configuration de clés SSH afin de pouvoir utiliser un accès authentifié mais sans mot de passe est de loin la meilleure méthode. L’utilisation de mots de passe devient très vite désordonnée et, comme le mot de passe de chaque compte utilisateur vous est demandé, elle vous empêche d’automatiser complètement le processus avec un script.
Nous avons configuré des clés SSH pour les comptes utilisateurs que nous utilisons sur chaque serveur distant. Cela a fourni un accès SSH transparent à l’autre serveur, pour ces deux utilisateurs. Cela nous permet de transférer des fichiers dans les deux sens, en utilisant ces deux comptes utilisateurs.
Pour copier des fichiers du compte utilisateur « davem » sur un ordinateur Manjaro vers le compte « dave » sur un ordinateur Fedora, via une commande scp émise depuis notre ordinateur Ubuntu local, la syntaxe est la suivante :
scp [email protected]:/home/davem/man. [email protected]:/home/dave/
Copie de fichiers d’un serveur distant à un autre.
Nous sommes silencieusement renvoyés à la ligne de commande. Il n’y a aucune indication que quelque chose se soit passé. Partant du principe qu’une absence de nouvelles est une bonne nouvelle, scp ne signale que les erreurs pour cette copie de distant à distant. En vérifiant l’ordinateur Fedora, nous pouvons voir que les fichiers de l’ordinateur Manjaro ont été copiés et reçus.
Fichiers de l’ordinateur Manjaro reçus sur l’ordinateur Fedora
Par défaut, les fichiers sont copiés directement de l’ordinateur source vers l’ordinateur cible. Vous pouvez passer outre en utilisant l’option -3 (trois voies).
Avec cette option, les fichiers sont transférés de la cible vers la source, via votre ordinateur local. Pour que cela se produise, il faut que l’accès SSH de votre ordinateur local à l’ordinateur cible soit transparent.
scp -3 [email protected]:/home/davem/man. [email protected]:/home/dave/
Copie de fichiers d’un serveur distant à un autre, via l’ordinateur local
Rien n’indique que quelque chose se soit passé, même en faisant transiter les fichiers par votre ordinateur local. Pour s’en convaincre, il suffit bien sûr de vérifier l’ordinateur cible.
Autres options
L’option -p (préserver les attributs du fichier) permet de conserver les drapeaux de création, de propriété et d’accès du fichier d’origine sur les fichiers transférés. Ils auront les mêmes métadonnées que les fichiers originaux sur l’ordinateur source.
Si vous voyez des messages d’erreur, essayez de répéter la commande et utilisez l’option -v (verbose) pour obtenir des informations détaillées sur la tentative de transfert. Vous devriez être capable de repérer le point d’échec dans la sortie.
L’option -C (compress) compresse les fichiers au fur et à mesure qu’ils sont copiés et les décompresse lorsqu’ils sont reçus. C’est un procédé qui remonte à l’époque des communications lentes par modem entre ordinateurs. En réduisant la taille de la charge utile, on pouvait réduire les temps de transmission.
Aujourd’hui, le temps nécessaire à la compression et à la décompression des fichiers est susceptible de prendre plus de temps que la différence entre les transmissions compressées et non compressées. Mais comme scp est surtout utilisé pour copier des fichiers entre des ordinateurs situés sur le même réseau local, la vitesse de transmission ne devrait pas être un problème.
Tout ce que vous dites est étonnamment légitime et je me demande pourquoi je ne l’avais pas vu sous cet angle auparavant. Cet article m’a vraiment mis la puce à l’oreille en ce qui concerne ce sujet. Néanmoins, il y a une question particulière avec laquelle je ne suis pas très à l’aise et pendant que j’essaie de la réconcilier avec l’idée centrale de la position, permettez-moi de voir exactement ce que le reste des lecteurs ont à dire.
Très bien fait.
Bonjour,
Avec scp, vous pouvez copier un fichier ou un répertoire :
De votre système local vers un système distant.
D’un système distant vers votre système local.
Entre deux systèmes distants à partir de votre système local.
Lors du transfert de données avec scp, les fichiers et le mot de passe sont cryptés de sorte que toute personne espionnant le trafic n’obtienne rien de sensible.
Dans ce tutoriel, nous vous montrerons comment utiliser la commande scp à travers des exemples pratiques et des explications détaillées des options scp les plus courantes.
Syntaxe de la commande SCP
Avant d’aborder l’utilisation de la commande scp, commençons par passer en revue la syntaxe de base.
La syntaxe de la commande scp prend la forme suivante :
scp [OPTION] [user@]SRC_HOST :]file1 [user@]DEST_HOST :]file2
OPTION – options scp telles que le chiffrement, la configuration ssh, le port ssh, la limite, la copie récursive …etc.
[user@]SRC_HOST :]file1 – Fichier source.
[user@]DEST_HOST :]file2 – Fichier de destination.
Les fichiers locaux doivent être spécifiés à l’aide d’un chemin absolu ou relatif, tandis que les noms de fichiers distants doivent inclure un utilisateur et un hôte.
scp fournit un certain nombre d’options qui contrôlent tous les aspects de son comportement. Les options les plus utilisées sont :
-P – Spécifie le port ssh de l’hôte distant.
-p – Préserve les heures de modification et d’accès aux fichiers.
-q – Utilisez cette option si vous souhaitez supprimer l’indicateur de progression et les messages autres que d’erreur.
-C – Cette option force scp à compresser les données lorsqu’elles sont envoyées à la machine de destination.
-r – Cette option indique à scp de copier les répertoires de manière récursive.
Avant de commencer
La commande scp s’appuie sur ssh pour le transfert de données. Elle nécessite donc une clé ou un mot de passe ssh pour s’authentifier sur les systèmes distants.
Les deux points ( 🙂 permettent à scp de distinguer les emplacements locaux et distants.
Pour pouvoir copier des fichiers, vous devez avoir au moins les droits de lecture sur le fichier source et les droits d’écriture sur le système cible.
Faites attention lorsque vous copiez des fichiers qui partagent le même nom et le même emplacement sur les deux systèmes, car scp écrasera les fichiers sans avertissement.
Lors du transfert de fichiers volumineux, il est recommandé d’exécuter la commande scp à l’intérieur d’une session screen ou tmux.
Copier des fichiers et des répertoires entre deux systèmes avec scp
Copier un fichier local vers un système distant avec la commande scp
Pour copier un fichier d’un système local vers un système distant, exécutez la commande suivante :
scp fichier.txt [email protected].0.2:/remote/directory
Où fichier.txt est le nom du fichier que nous voulons copier, nom_d’utilisateur_distant est l’utilisateur sur le serveur distant, 10.10.0.2 est l’adresse IP du serveur. Le répertoire /remote/directory est le chemin d’accès au répertoire dans lequel nous voulons copier le fichier. Si vous ne spécifiez pas de répertoire distant, le fichier sera copié dans le répertoire personnel de l’utilisateur distant.
Vous serez invité à saisir le mot de passe de l’utilisateur, et le processus de transfert commencera.
Le mot de passe de [email protected].0.2 :
file.txt 100% 0 0.0KB/s 00:00
L’omission du nom du fichier dans l’emplacement de destination permet de copier le fichier avec le nom original. Si vous souhaitez enregistrer le fichier sous un nom différent, vous devez spécifier le nouveau nom du fichier :
scp fichier.txt [email protected].0.2:/remote/directory/newfilename.txt
Si SSH sur l’hôte distant écoute sur un port autre que le port par défaut 22, vous pouvez spécifier le port en utilisant l’argument -P :
scp -P 2322 file.txt [email protected].0.2:/remote/directory
La commande permettant de copier un répertoire est très similaire à celle utilisée pour copier des fichiers. La seule différence est que vous devez utiliser l’option -r pour la récurrence.
Pour copier un répertoire d’un système local à un système distant, utilisez l’option -r :
scp -r /local/répertoire [email protected].0.2:/remote/directory
Copier un fichier distant sur un système local à l’aide de la commande scp
Pour copier un fichier d’un système distant vers un système local, utilisez l’emplacement distant comme source et l’emplacement local comme destination.
Par exemple, pour copier un fichier nommé file.txt depuis un serveur distant dont l’adresse IP est 10.10.0.2, exécutez la commande suivante :
scp [email protected].0.2:/remote/file.txt /local/répertoire
Si vous n’avez pas défini une connexion SSH sans mot de passe à la machine distante, il vous sera demandé de saisir le mot de passe de l’utilisateur.
Copier un fichier entre deux systèmes distants à l’aide de la commande scp
Contrairement à rsync , lorsque vous utilisez scp, vous n’avez pas besoin de vous connecter à l’un des serveurs pour transférer des fichiers d’une machine distante à une autre.
La commande suivante copiera le fichier /files/file.txt depuis l’hôte distant host1.com vers le répertoire /files sur l’hôte distant host2.com.
scp [email protected]:/files/file.txt [email protected]:/files
Il vous sera demandé de saisir les mots de passe des deux comptes distants. Les données seront transférées directement d’un hôte distant à l’autre.
Pour acheminer le trafic via la machine sur laquelle la commande est émise, utilisez l’option -3 :
scp -3 [email protected]:/files/file.txt [email protected]:/files