Comment transférer des fichiers de manière sécurisée dans Linux en utilisant SCP

Image en vedette du transfert SCP Linux

Lorsque vous transférez des fichiers vers un serveur Linux distant, vous avez plusieurs options. L’un des meilleurs moyens est d’utiliser un programme appelé Secure Copy, ou SCP, qui fonctionne sur le protocole SSH pour transférer rapidement des fichiers sur votre réseau vers un système distant. Ce tutoriel vous montre comment transférer des fichiers de manière sécurisée en utilisant SCP dans Linux.

Table des matières

  • Configuration de SSH
  • Connexion à votre système via SSH
  • Utilisation de SCP pour transférer des fichiers
  • Compression du transfert de fichiers dans SCP
  • Optimisation d’un transfert de données avec SCP
  • Limitation de l’utilisation de la bande passante dans SCP
  • Transfert de distant à distant avec SCP
  • Utilisation d’un proxy avec SCP
  • Modification du port par défaut dans SCP
  • Utilisation du mode silencieux de SCP
  • Questions fréquentes

Configuration de SSH

Sur votre serveur distant, vous devrez installer un serveur SSH. Le plus courant sur Linux est le serveur OpenSSH. Pour l’installer, exécutez l’une des commandes suivantes :

# Serveur basé sur Debian/Ubuntu  
sudo apt install ssh  
  
# Fedora  
sudo dnf install openssh

Installation de SSH

Selon votre distribution, vous devrez peut-être autoriser SSH à travers certains pare-feux logiciels. Sur Ubuntu, ce problème n’existe pas, mais sur Fedora, vous devrez également exécuter les commandes suivantes :

sudo firewall-cmd --add-service=ssh --permanent  
sudo firewall-cmd --reload

Activation du pare-feu Fedora

Connexion à votre système via SSH

Avant de pouvoir vous connecter via SSH, vous devez trouver l’adresse IP du serveur distant. Sur les serveurs graphiques, l’adresse IP est affichée dans l’applet Réseau dans les paramètres système. Sur la plupart des serveurs, vous devriez utiliser la commande ip dans le terminal.

ip addr

Vérification de l'adresse IP

Dans la sortie, recherchez la ligne commençant par inet sous ethX ou enpXsy, en fonction de la façon dont votre interface réseau est connectée au système. Dans mon cas, c’est 192.168.68.108.

Pour tester la connexion SSH, passez à une autre machine Linux et tapez :

Changez le “user” par le nom d’utilisateur réel sur le serveur.

Connexion au serveur distant

Entrez le mot de passe de ce compte, et c’est parti. Si vous recevez une question sur “l’authenticité de l’hôte ne peut pas être établie”, répondez simplement “oui”. C’est un contrôle de sécurité destiné à s’assurer que vous vous connectez à votre serveur réel et non à un imposteur. Vous devriez voir la même invite apparaître sur votre système client que celle que vous voyez lorsque vous vous connectez directement au serveur, ce qui signifie que votre connexion a réussi. Vous devriez également configurer vos connexions SSH pour une sécurité maximale, ou même mettre en place une authentification à deux facteurs, avant de procéder à l’étape suivante.

Utilisation de SCP pour transférer des fichiers

Maintenant que vous avez testé la connexion SSH, commencez à copier des fichiers entre les deux machines. Le transfert de fichiers sécurisé est réalisé en utilisant la commande scp. Le format de base de la commande scp est :

scp /CHEMIN/VERS/FICHIERS USER@ADRESSE-IP:CHEMIN/VERS/DES/CIBLE

Par exemple, pour copier le fichier “backup.tar.gz” depuis la machine locale vers le dossier “backups” dans le répertoire personnel de l’utilisateur “ramces” sur le serveur distant avec l’adresse IP 192.168.68.165, utilisez :

scp backup.tar.gz [email protected]:~/backups/

Copie de base

Tout comme lorsque vous vous connectez en utilisant ssh, vous serez invité à saisir le mot de passe. Vous ne serez pas invité pour le nom d’utilisateur, car cela a été spécifié dans la commande.

Vous pouvez également utiliser des jokers comme suit :

scp *.tar.gz [email protected]:~/backups/

Copie avec correspondance glob

Pour copier un fichier du serveur distant vers la machine locale, inversez simplement les paramètres :

scp [email protected]:~/backups/backup.tar.gz ./

Copie inverse

Remarquez le point à la fin de la commande ? Cela signifie “le répertoire courant”, comme avec les commandes cp ou mv standard. Vous pourriez tout aussi bien spécifier un autre répertoire si vous le souhaitez.

scp -r [email protected]:~/backups/ backups-from-server/

Et il en va de même avec les jokers :

scp [email protected]:~/backups/*.txz ./

Pour copier récursivement un répertoire vers un serveur distant, utilisez l’option -r :

scp -r backups/ [email protected]:~/backups/

Copie récursive

Pour copier une copie récursive d’un répertoire du serveur distant vers la machine locale, utilisez :

scp -r [email protected]:~/backups/ ./

Copie récursive inverse

Compression du transfert de fichiers dans SCP

En plus de la copie de base, il est également possible de modifier le comportement de SCP pendant ces transferts de fichiers. Par exemple, vous pouvez utiliser le drapeau -C pour compresser les données que SCP envoie aux clients distants :

scp -C backup.tar.gz [email protected]:/home/ramces/

Cette option fonctionne en compressant chaque paquet de données au fur et à mesure qu’il est envoyé via le programme SCP. En tant que tel, cela peut être incroyablement utile si vous êtes dans une connexion à bande passante limitée et souhaitez envoyer de manière fiable un fichier à un serveur distant.

Copie avec compression de données

Tout comme les options ci-dessus, vous pouvez également utiliser -C en même temps que le drapeau -r pour compresser et transférer récursivement des fichiers vers une machine distante. Par exemple, la commande suivante compresse et récupère le fichier “backup.tar.gz” de mon serveur distant :

scp -Cr [email protected]:/home/ramces/backups /home/ramces/

Copie avec compression de données inverse

Optimisation d’un transfert de données avec SCP

Dans la plupart des cas, SCP tente d’utiliser l’algorithme de chiffrement AES-128 pour tous ses transferts de fichiers. Cependant, il y a des cas où cet algorithme particulier ne sera pas adapté pour les fichiers que vous souhaitez transférer.

Sachant cela, il est possible d’optimiser davantage et de sécuriser SCP en changeant directement l’algorithme de chiffrement pour un transfert spécifique. Pour ce faire, vous devez utiliser le drapeau -c suivi du chiffre que vous souhaitez utiliser.

Par exemple, la commande suivante transfère le fichier “backup.tar.gz” à mon serveur distant en utilisant AES-256 :

scp -c aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Changer le chiffre par défaut

De plus, l’option -c vous permet également de fournir une liste de chiffres que vous souhaitez utiliser pour un transfert de fichier particulier. Par exemple, la commande suivante utilise à la fois AES-192 et AES-256 lors du transfert du fichier “backup.tar.gz” vers mon serveur distant :

scp -c aes192-ctr,aes256-ctr ./backup.tar.gz [email protected]:/home/ramces/

Créer une liste de préférence de chiffres

Limitation de l’utilisation de la bande passante dans SCP

Bien que la compression des paquets de fichiers puisse vous aider à utiliser SCP dans de mauvaises conditions réseau, il est également possible de limiter la bande passante que le programme utilise lors d’un transfert. Cela est utile dans les cas où vous utilisez une connexion mesurée et ne souhaitez pas que SCP domine votre bande passante réseau.

Pour limiter la bande passante effective du programme, vous devez utiliser le drapeau -l suivi de la limite supérieure que vous souhaitez en kilobits par seconde (Kb/s). Par exemple, en exécutant la commande suivante, le fichier “backup.tar.gz” sera transféré à mon serveur distant à une bande passante effective de 1 600 Kb/s :

scp -l 1600 ./backup.tar.gz [email protected]:/home/ramces/

Limiter la bande passante pendant la copie

Transfert de distant à distant avec SCP

En plus de copier des fichiers locaux vers votre serveur distant et vice versa, vous pouvez également utiliser SCP pour gérer plusieurs serveurs distants depuis votre machine locale, car SCP ne s’occupe que du transfert de fichiers et ne discrimine pas entre une machine locale et distante.

Pour transférer entre deux serveurs distants, vous devez indiquer explicitement le nom d’utilisateur et l’adresse de chacune de ces machines. Par exemple, en exécutant la commande suivante, je transfèrerai mon fichier “remote-backup.tar.gz” entre mes deux serveurs distants :

scp [email protected]:/home/ramces/remote-backup.tar.gz [email protected]:/home/ramces/

Transfert de distant à distant

Utilisation d’un proxy avec SCP

Par défaut, SCP utilise l’adresse IP de votre machine locale chaque fois qu’il transfère des fichiers entre différents hôtes. Bien que cela soit tout à fait acceptable dans des situations normales, cela peut poser problème si votre réseau local restreint toute activité SCP. Une solution rapide pour résoudre ce problème consiste à faire passer votre connexion locale par un proxy SSH.

Pour ce faire, vous devez utiliser le drapeau -o suivi de l’option ProxyCommand. Cela vous permet de créer une connexion SSH de base à une nouvelle machine qui exécutera à son tour votre commande SCP. Par exemple, en exécutant la commande suivante, vous créerez un nouveau proxy SSH avec une machine distante et transférerez le fichier “backup.tar.gz” en l’utilisant :

scp -o "ProxyCommand ssh [email protected] nc %h %p" ./backup.tar.gz [email protected]:/home/ramces/

Contourner le proxy SSH

Modification du port par défaut dans SCP

En plus de créer un proxy SSH de base, vous pouvez également changer le port par défaut pour SCP. Cela est particulièrement utile si vous sécurisez votre serveur Linux et ne souhaitez pas exposer de ports par défaut.

Pour utiliser SCP avec un port différent, vous devez utiliser le drapeau -P suivi du numéro de port que vous souhaitez utiliser. Par exemple, la commande suivante copiera récursivement mon répertoire “backup” et se connectera à mon serveur distant en utilisant le port 2222 :

scp -r -P 2222 ./backup [email protected]:/home/ramces/

Utilisation d'un port personnalisé

Utilisation du mode silencieux de SCP

Enfin, il est également possible de supprimer complètement toute sortie terminale d’une commande SCP. Cela est particulièrement utile si vous souhaitez créer un script non interactif qui s’exécutera sur votre machine. Non seulement cela, mais vous pouvez également automatiser pleinement ce processus en créant un cronjob et en transférant une clé SSH privée vers votre serveur.

Pour créer un transfert SCP silencieux, vous devez utiliser le drapeau -q. Par exemple, la commande suivante transférera mon fichier “backup.tar.gz” silencieusement vers mon serveur distant :

scp -q ./backup.tar.gz [email protected]:/home/ramces/

Mode silencieux

Questions fréquentes

Mon transfert de distant à distant dans SCP ne fonctionne pas. Comment puis-je résoudre cela ?

Ce problème est très probablement dû à un port bloqué dans l’un des fichiers de configuration de votre machine distante. Pour résoudre ce problème, assurez-vous que le port par défaut pour SSH est ouvert sur chacune de vos machines.

Ce problème peut également être dû à l’une de vos machines distantes étant derrière une connexion CG-NAT, ainsi toute connexion extérieure à votre machine distante ne se résoudra pas correctement. Pour corriger cela, vous devez utiliser un programme Virtual LAN, tel que Yggdrasil, qui vous permettra de percer à travers le CG-NAT.

J’ai exécuté un proxy SCP et l’hôte distant a fermé la connexion. Que puis-je faire ?

Ce problème est très probablement dû à un problème avec votre machine proxy. Pour commencer correctement un proxy SSH, assurez-vous que la machine que vous souhaitez utiliser a le serveur OpenSSH et netcat. Pour installer ces programmes sur Ubuntu, exécutez la commande suivante : sudo apt install ssh netcat.

Est-il possible de connaître tous les chiffres disponibles pour SCP ?

Par défaut, le programme SCP s’appuie fortement sur le protocole SSH pour ses fonctions cryptographiques. De ce fait, vous pouvez utiliser le programme SSH pour imprimer une liste des chiffres que vous pouvez utiliser avec SCP. Par exemple, vous pouvez exécuter ssh -Q ciphers pour imprimer une brève liste de tous les chiffres disponibles sur votre machine.

Crédit image : Unsplash. Toutes les modifications et captures d’écran par Ramces Red.