10 commandes SCP pour transférer des fichiers/dossiers sous Linux

Les administrateurs Linux devraient être familiers avec l’environnement de ligne de commande. Étant donné que GUI (Interface Utilisateur Graphique) sur les serveurs Linux n’est pas courant d’être installé.

SSH peut être le protocole le plus populaire pour permettre aux administrateurs Linux de gérer les serveurs de manière sécurisée à distance. Intégré avec la commande SSH, il y a la commande SCP, qui est utilisée pour copier le(s) fichier(s) entre les serveurs de manière sécurisée.

Syntaxe de base de la commande SCP

La commande ci-dessous se lira comme la copie de « nom_du_fichier_source » dans « dossier_destination » sur « hôte_destination » en utilisant le compte « nom_d’utilisateur« .

scp source_file_name username@destination_host:destination_folder

Il existe de nombreux paramètres dans la commande SCP que vous pouvez utiliser. Voici les paramètres que vous pourriez utiliser au quotidien.

Transférer des fichiers en toute sécurité sous Linux

La commande de base SCP sans paramètres copiera les fichiers en arrière-plan. Les utilisateurs ne verront rien à moins que le processus ne soit terminé ou qu’une erreur se produise.

Vous pouvez utiliser le paramètre “-v” pour imprimer des informations de débogage à l’écran. Cela peut vous aider à déboguer les problèmes de connexion, d’authentification et de configuration.

Copier un fichier de l’hôte local vers le serveur distant

La commande suivante copie un fichier « scp-cheatsheet.pdf » d’un système local à un système Linux distant sous le répertoire /home/tecmint.

$ scp -v scp-cheatsheet.pdf [email protected]:/home/tecmint/.

Exemple de sortie:

SCP – Copy File to Remote Linux Server
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/.
OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020
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.0.183 [192.168.0.183] port 22.
debug1: Connection established.
debug1: identity file /home/tecmint/.ssh/id_rsa type -1
debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_dsa type -1
debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/tecmint/.ssh/id_xmss type -1
...

Copier un fichier d’un hôte distant vers un hôte local

La commande suivante copie un fichier « ssh-cheatsheet.pdf » d’un hôte distant vers un système local sous le répertoire /home/tecmint.

$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.

Exemple de sortie:

SCP – Copy File to Local System
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf
OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020
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.0.183 [192.168.0.183] port 22.
debug1: Connection established.
debug1: identity file /home/tecmint/.ssh/id_rsa type -1
debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_dsa type -1
debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1
...

Copier un fichier d’un hôte distant vers un autre hôte

La commande suivante copie un fichier « ssh-cheatsheet.pdf » d’un hôte distant vers un autre système hôte distant sous le répertoire /home/tecmint.

$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf [email protected]:/home/anusha/.

Copier des fichiers avec la date et l’heure de création originale

Le paramètre « -p » préservera les dates de modification et d’accès originales des fichiers lors de la copie des fichiers, ainsi que le temps estimé et la vitesse de connexion qui apparaîtront à l’écran.

$ scp -p scp-cheatsheet.pdf [email protected]:/home/tecmint/.

Exemple de sortie:

SCP – Preserve File Timestamps
[email protected]'s password: 
scp-cheatsheet.pdf                                                                                                                                                                 100%  531   721.4KB/s   00:00    

Compression SCP lors de la copie de fichiers

L’un des paramètres qui peut accélérer votre transfert de fichiers est le paramètre « -C« , qui est utilisé pour compresser vos fichiers à la volée. La particularité est que la compression n’a lieu que sur le réseau. Lorsque le fichier est arrivé sur le serveur de destination, il reprendra sa taille d’origine avant la compression.

Examinez ces commandes. Elle utilise un seul fichier de 93 Mb.

$ scp -pv messages.log [email protected]:.

Exemple de sortie:

SCP Transfers File Without Compression
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t.
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email protected]'s password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: Sending command: scp -v -p -t.
File mtime 1323853868 atime 1380425711
Sending file timestamps: T1323853868 0 1380425711 0
messages.log 100% 93MB 58.6KB/s 27:05
Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
Bytes per second: sent 58758.4, received 15.6
debug1: Exit status 0

Le copiage de fichiers sans le paramètre « -C » entraînera un temps de 1661,3 secondes. Vous pouvez comparer le résultat à la commande ci-dessous utilisant le paramètre « -C".

$ scp -Cpv messages.log [email protected]:.

Exemple de sortie:

SCP – Transfers File with Compression
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t.
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email protected]'s password:
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: channel 0: new [client-session]
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380428748
Sending file timestamps: T1323853868 0 1380428748 0
Sink: T1323853868 0 1380428748 0
Sending file modes: C0600 97517300 messages.log
messages.log 100% 93MB 602.7KB/s 02:38
Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
Bytes per second: sent 54813.9, received 97.0
debug1: Exit status 0
debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48

Comme vous pouvez le constater, lorsque vous utilisez la compression, le processus de transfert est terminé en 162,5 secondes. Il est 10 fois plus rapide que de ne pas utiliser le paramètre « -C« . Si vous copiez de nombreux fichiers à travers le réseau, le paramètre « -C » vous aidera à réduire le temps total nécessaire.

La chose à laquelle nous devons faire attention est que la méthode de compression ne fonctionnera pas sur tous les fichiers. Lorsque le fichier source est déjà compressé, vous ne constaterez aucune amélioration. Les fichiers tels que .zip, .rar, images, et .iso ne seront pas affectés par le paramètre « -C« .

Changer le chiffrement SCP pour crypter les fichiers

Par défaut, SCP utilise « AES-128 » pour chiffrer les fichiers. Si vous souhaitez utiliser un autre chiffrement, vous pouvez utiliser le paramètre « -c« .

Examinez cette commande.

$ scp -c 3des Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

La commande ci-dessus indique à SCP d’utiliser l’algorithme 3des pour chiffrer le fichier. Veuillez noter que le paramètre utilisant « -c » n’est pas « -C« .

Limiter l’utilisation de la bande passante avec la commande SCP

Un autre paramètre qui peut être utile est le paramètre « -l« . Le paramètre « -l » limite la bande passante à utiliser. Cela peut être utile si vous créez un script d’automatisation pour copier de nombreux fichiers, mais que vous ne souhaitez pas que la bande passante soit épuisée par le processus SCP.

$ scp -l 400 Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

La valeur 400 derrière le paramètre « -l » signifie que nous limitons la bande passante pour le processus SCP à seulement 50 KB/sec.

Il est important de se rappeler que la bande passante est spécifiée en Kilobits/sec (kbps). Cela signifie que 8 bits sont équivalents à 1 octet.

Pendant que SCP compte en kilooctets/seconde (Ko/s). Donc, si vous souhaitez limiter votre bande passante à un SCP maximum de seulement 50 Ko/s, vous devez le régler sur 50 x 8 = 400.

SCP avec un Port Différent

Habituellement, SCP utilise le port 22 comme port par défaut, mais pour des raisons de sécurité, vous pouvez changer le port vers un autre port. Par exemple, nous utilisons le port 2249.

Ensuite, la commande devrait être comme ceci.

$ scp -P 2249 Label.pdf [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

Assurez-vous qu’elle utilise un « P » majuscule et non un « p » minuscule, car « p » est déjà utilisé pour les temps et les modes préservés.

SCP – Copier des Fichiers et des Répertoires de manière Récursive

Parfois, nous avons besoin de copier le répertoire et tous les fichiers/répertoires à l’intérieur. Il serait préférable de pouvoir le faire avec une seule commande en utilisant le paramètre « r », qui copie l’ensemble du répertoire de manière récursive.

$ scp -r documents [email protected]:.

[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

Lorsque le processus de copie est terminé, sur le serveur de destination, vous trouverez un répertoire nommé « documents » avec tous ses fichiers. Le dossier « documents » est créé automatiquement.

SCP – Désactiver les messages de progression

Si vous choisissez de ne pas voir le compteur de progression et les messages d’avertissement / diagnostics provenant de SCP, vous pouvez le désactiver à l’aide du paramètre « -q ». Voici un exemple.

$ scp -q Label.pdf [email protected]:.

[email protected]'s password:
pungki@mint ~/Documents $

Comme vous pouvez le constater, après avoir entré le mot de passe, il n’y a aucune information sur le processus SCP. Après la fin du processus, vous verrez à nouveau un message d’invite.

SCP – Copier des fichiers à l’aide d’un proxy

Le serveur proxy est généralement utilisé dans un environnement de bureau. Par défaut, SCP n’est pas configuré avec un proxy. Lorsque votre environnement utilise un proxy, vous devez  » dire  » à SCP de communiquer avec le proxy.

Voici le scénario. L’adresse du proxy est 10.0.96.6 et le port du proxy est 8080. Le proxy implémente également l’authentification des utilisateurs. Tout d’abord, vous devez créer le fichier « ~/.ssh/config« . Deuxièmement, vous placez cette commande à l’intérieur.

ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth

Ensuite, vous devez créer le fichier « ~/.ssh/proxyauth » qui contient.

myusername:mypassword

Après cela, vous pouvez utiliser SCP de manière transparente comme d’habitude.

Veuillez noter que le corkscrew n’est peut-être pas encore installé sur votre système. Sur mon Linux Mint, je dois l’installer en premier, en utilisant la procédure d’installation standard de Linux Mint.

$ apt-get install corkscrew

Pour les autres systèmes basés sur yum, les utilisateurs peuvent installer corkscrew en utilisant la commande yum suivante.

# yum install corkscrew

Autre chose à noter, puisque le fichier “~/.ssh/proxyauth” contient votre “nom d’utilisateur” et “mot de passe” en format clair, assurez-vous que le fichier ne peut être consulté que par vous.

Choisissez un Fichier ssh_config Différent

Pour les utilisateurs mobiles qui changent souvent entre les réseaux de l’entreprise et les réseaux publics, il est pénible de toujours changer les paramètres dans SCP. Il serait préférable de mettre un fichier ssh_config différent pour répondre à nos besoins.

Le proxy est utilisé dans le réseau de l’entreprise, mais pas dans le réseau public et vous changez régulièrement de réseau.

$ scp -F /home/pungki/proxy_ssh_config Label.pdf

[email protected]:.
[email protected]'s password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

Par défaut, le fichier “ssh_config” par utilisateur est placé dans “~/.ssh/config“. Créer un fichier “ssh_config” spécifique avec compatibilité proxy facilitera le passage entre les réseaux.

Lorsque vous êtes sur le réseau de l’entreprise, vous pouvez utiliser le paramètre “-F”. Lorsque vous êtes sur un réseau public, vous pouvez omettre le paramètre “-F”.

Voilà tout ce qu’il y a à savoir sur SCP. Vous pouvez consulter les pages de manuel de SCP pour plus de détails. N’hésitez pas à laisser des commentaires et des suggestions.

Source:
https://www.tecmint.com/scp-commands-examples/