Un didacticiel simple pour vous aider à transférer des fichiers vers un système distant depuis votre système Linux à l'aide de la commande scp.
SCP signifie « copie sécurisée ». scp
est un utilitaire en ligne de commande proposé par Linux qui permet le transfert de fichiers et de répertoires d'une machine à une autre sur un réseau non sécurisé.
Si vous souhaitez copier des fichiers d'un système à un autre, cela scp
peut être une très bonne option pour effectuer un transfert sécurisé des fichiers et des répertoires. Lorsque les deux machines communicantes sont connectées sur le même réseau, alors l'utilisation scp
devient possible.
Vous pouvez vous fier fortement à la scp
commande pour la confidentialité et l'intégrité, car le fichier en cours de transfert et le mot de passe utilisé pour le transfert sont tous deux cryptés. Aucune information sensible ne sera révélée même si quelqu'un essaie d'espionner le trafic pendant que ce transfert est en cours.
Dans ce tutoriel, nous verrons différents exemples de la scp
commande. Nous examinerons également certaines des options fréquemment utilisées avec la scp
commande.
Prise en main de la commande scp
En utilisant la scp
commande, vous pouvez transférer des fichiers/répertoires :
- De votre machine locale à une machine distante.
- Entre deux machines distantes.
- D'une machine distante à votre machine locale.
Syntaxe générale :
scp [Option] [source_file_name] [[email protected]_Host]:destination_folder
Comprenons les attributs de base de cette commande un par un.
- [source_file_name] Il s'agit du fichier source que vous souhaitez copier.
- [ [email protected] _Host] Il s'agit du nom d'utilisateur du système distant sur lequel vous souhaitez copier le fichier. L'adresse IP de la machine distante est également utilisée dans cet attribut après le
@
symbole ' '.
- [destination_folder] Il s'agit du répertoire dans lequel vous souhaitez enregistrer le fichier copié.
Remarque : Le :
symbole deux-points ( ) est utilisé dans la syntaxe car il fait la différence entre les emplacements locaux et distants. Nous utilisons les deux points ( :
) avec le système distant pour spécifier le répertoire dans lequel les fichiers doivent être copiés. Si nous ne spécifions pas le répertoire cible, les fichiers seront alors copiés dans le répertoire personnel de l'utilisateur du système distant.
Options utilisées avec scp
Certaines des options les plus courantes utilisées avec la scp
commande sont répertoriées ci-dessous.
Option |
La description |
-C |
permettre la compression du fichier à transférer |
-v |
donner la sortie verbeuse |
-r |
copier des fichiers et des répertoires de manière récursive |
-p |
préserver les autorisations, les modes et les temps d'accès des fichiers |
-P |
changer le port par défaut utilisé par la scp commande |
Options fréquemment utilisées avec la commande scp
Nous verrons les exemples de ces options, plus loin dans le tutoriel.
Copier le fichier du local vers un système distant
scp
vous permet de transférer des fichiers de votre système local vers un système distant en utilisant la syntaxe suivante. Cela vous permet de transférer ou de télécharger vos fichiers sur un serveur placé à distance.
Syntaxe générale :
scp [file_name] [email protected]:[destination_folder]
Exemple:
scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
Dans cet exemple, nous copions un fichier 'apache-tomcat-9.0.8.tar.gz' du système local vers le système distant dont l'adresse IP est '143.110.178.221'.
Sur le système distant, le fichier sera maintenant copié dans le répertoire nommé 'gaurav'.
Sortir:
[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password:
apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB/s 02:00
[email protected]:~$
Vérifions la sortie sur le système distant pour le fichier.
[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#
Ainsi, le fichier est copié avec succès sur le système distant à l'aide de la scp
commande.
Copie de plusieurs fichiers sur un système distant
Dans l'exemple précédent, nous avons appris à transférer un fichier vers le système distant à l'aide de la scp
commande. Nous allons maintenant voir la méthode pour transférer plusieurs fichiers de votre système local vers un système distant à l'aide de cette commande.
Syntaxe générale :
scp [file 1] [file 2] [file n] [email protected]_host:[specific directory]
Laissez-nous comprendre ce processus simple avec un exemple.
Exemple:
scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
Ici, plusieurs fichiers sont mentionnés dans la commande à copier sur le système distant.
Sortir:
[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
[email protected]'s password:
ath.html 100% 199KB 94.7KB/s 00:02
abc.txt 100% 0 0.0KB/s 00:00
ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42.2KB/s 00:00
[email protected]:~$
Sur le système distant :
[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root 204057 Oct 5 08:58 ath.html
-rw-r--r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#
Les trois fichiers sont maintenant copiés sur le système distant.
Copie d'un répertoire sur le système distant
Vous pouvez utiliser la scp
commande pour copier un répertoire de votre système local vers le système distant. Le processus est similaire à celui de la copie d'un fichier. Pour copier également le contenu du répertoire, vous pouvez utiliser l' -r
option avec la scp
commande.
L' -r
option est utilisée pour copier un répertoire de manière récursive. Cela signifie que tous les sous-dossiers et fichiers à l'intérieur du répertoire seront également copiés.
Syntaxe générale :
scp -r [directory path] [email protected]_host:[target_directory]
Exemple:
scp -r PycharmProjects [email protected]:gaurav
Sortir:
[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password:
__main__.py 100% 623 7.8KB/s 00:00
__init__.py 100% 23 0.4KB/s 00:00
completion.py 100% 2929 28.1KB/s 00:00
search.py 100% 4728 38.7KB/s 00:00
uninstall.py 100% 2963 32.5KB/s 00:00
hash.py 100% 1681 21.3KB/s 00:00
check.py 100% 1430 16.8KB/s 00:00
configuration.py 100% 7125 50.4KB/s 00:00
show.py 100% 6289 49.8KB/s 00:00
download.py 100% 6623 48.2KB/s 00:00
[email protected]:~$
L'utilisation de l' -r
option avec la scp
commande copie tous les sous-dossiers et fichiers du répertoire de la machine locale vers le système distant.
Affichage d'informations détaillées sur le processus scp
Vous pouvez utiliser l' option -v
(minuscules v
) pour afficher les informations sur les fichiers en cours de copie sur un système distant ou local. Ce type de sortie est également appelé sortie verbeuse.
Lorsque cette option est utilisée, les informations de débogage complètes sur le fichier sont affichées à l'écran.
Syntaxe générale :
scp -v [file_name] [email protected]_host:
Exemple:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Sortir:
[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/gaurav/.ssh/id_rsa type -1
apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$
Ici, dans la sortie, vous pouvez voir que les informations de débogage du fichier sont affichées sur votre terminal lorsque la scp
commande est utilisée avec l' -v
option.
Transfert de fichiers entre deux hôtes distants
Linux vous permet de vous connecter à plusieurs hôtes distants. Vous pouvez transférer des fichiers et des répertoires entre deux hôtes distants à l'aide de la scp
commande.
Syntaxe générale :
scp [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]
La syntaxe peut sembler un peu plus large mais est assez simple. Ici, la première partie de la commande donne l'entrée sur l'utilisateur distant à partir duquel le fichier doit être copié. deux-points (:) et /
est utilisé pour spécifier le nom du fichier ou le nom du répertoire qui doit être transféré entre les deux machines distantes.
La deuxième partie donne des informations sur le système distant cible sur lequel le fichier doit être copié.
Exemple:
scp -r [email protected]:gaurav [email protected]:/team
Ici, nous allons copier un répertoire nommé 'gaurav' de manière récursive du système local vers un système distant. Le fichier sera copié dans un dossier « équipe » sur le système distant.
Sortir:
[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team
[email protected]'s password:
1.py 100% 134 261.3KB/s 00:00
variables.py 100% 377 949.2KB/s 00:00
abc.txt 100% 0 0.0KB/s 00:00
ath.html 100% 199KB 41.8MB/s 00:00
[email protected]:~$
Ici, nous avons utilisé la scp
commande sur le système local pour transférer un répertoire nommé 'gaurav' d'un serveur distant à un autre.
Transférer des fichiers du système distant vers votre système local
Vous pouvez facilement transférer les fichiers ou les répertoires du système distant vers votre système local à l'aide de la scp
commande. En termes plus simples, vous pouvez télécharger plusieurs fichiers ou répertoires du serveur distant sur votre système local à l'aide de la scp
commande.
Syntaxe générale :
scp [email protected]_host:/files/file.txt /[folder_of_local_system]
Sortir:
[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password:
how.txt 100% 11 0.1KB/s 00:00
[email protected]:~$
Ici, j'ai téléchargé (copié) le fichier du serveur distant sur mon répertoire personnel. Par conséquent, j'ai utilisé le point ( .
) pour spécifier dans la commande de copier le fichier dans mon répertoire personnel.
Exemple de sortie :
[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt
[email protected]:~$
Ici, le fichier est maintenant copié dans mon répertoire personnel à partir du serveur distant.
De la même manière, vous pouvez télécharger plusieurs fichiers ou répertoires depuis le serveur distant en utilisant la scp
commande avec les options appropriées.
Compresser des fichiers pour accélérer les transferts
Parfois, le transfert de fichiers volumineux peut prendre du temps. Ce problème peut être résolu en utilisant la scp
commande avec l' option -C
(majuscule C
).
En utilisant l' -C
option, compresse les fichiers de plus grande taille, ce qui facilite un transfert plus rapide et permet ainsi de gagner du temps.
Un fait intéressant à propos de cette option est que le fichier est copié avec sa taille d'origine sur le système de destination, mais pendant le processus de transfert, la taille est compressée pour permettre un transfert plus rapide. Ainsi, la compression se fait uniquement sur le réseau.
Syntaxe générale :
scp -C [file_name] [email protected]_host:[target_folder]
Voyons un exemple comparatif pour comprendre la différence.
Transfert sans option -C :
[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$
D'après la sortie ci-dessus, nous pouvons voir que le temps requis pour le transfert est de 74,6 secondes. Nous allons essayer de transférer le même fichier en utilisant l'option -C et observer la différence.
Transfert avec l'option -C :
[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img 100% 1834KB 98.7KB/s 00:18
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img 100% 1834KB 100.3KB/s 00:18
Sink: E
Sending file modes: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218.5KB/s 00:16
Sink: E
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$
Ici, nous pouvons facilement observer que l'utilisation de l' -C
option avec la scp
commande nous a permis de compresser le fichier sur le réseau, s'avérant ainsi une option permettant de gagner du temps.
Utiliser un autre port ssh pour le transfert de fichiers
Lors de l'utilisation de la scp
commande, le port par défaut déployé est le port 22
. L'utilisateur a la liberté de personnaliser ce choix de port. Vous pouvez utiliser l' -P
option (P majuscule) avec la scp
commande pour utiliser le port de votre choix.
Syntaxe générale :
cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]
Exemple:
scp -P 4248 dlink [email protected]:team
En utilisant la commande ci-dessus, le fichier sera transféré vers le serveur distant. Mais cette fois, le port utilisé sera à la port 4248
place du port par défaut port 22
.
Conclusion
Après avoir parcouru ce tutoriel, nous avons appris la nature dynamique de la scp
commande utilisée pour transférer ou copier des fichiers d'un système à un autre. Cette option peut également être utilisée pour télécharger des fichiers ou des répertoires à partir du serveur distant. Ainsi, nous pouvons conclure que la scp
commande s'avère très utile pour les transferts de fichiers lorsque vous devez gérer plusieurs systèmes ainsi que des serveurs distants simultanément.