Notes et transcriptions du cours “Administrez un système Linux” disponible sur la plateforme Openclassrooms.
Transférez des fichiers par le réseau
Dans de nombreux cas, un serveur Linux ne sera pas installé en mode graphique. C'est normal, c'est un serveur. La couche graphique est inutile : elle représente des failles potentielles de sécurité supplémentaires, et prendra des ressources matérielles pour rien.
Le seul outil de communication constant et fiable avec le serveur reste donc le terminal. Cependant, certaines tâches sont moins intuitives avec un terminal que lorsque vous disposez d'une belle interface graphique. Elles sont peut être moins intuitives, mais elles restent possibles.
Dans ce chapitre, je vous propose d'étudier spécifiquement les tâches de téléchargement et de transfert de fichiers à partir d'un terminal. Nous verrons dans un premier temps les deux logiciels les plus utilisés pour télécharger des fichiers en HTTP sur le réseau, à savoir wget
et curl
.
Nous verrons ensuite comment transférer des fichiers d'un serveur à l'autre de manière sécurisée en utilisant le protocole SSH.
Enfin, nous verrons comment se connecter et transférer des fichiers à partir d'un client FTP/SFTP.
Les deux logiciels les plus utilisés sous Linux pour télécharger des fichiers depuis un terminal sont wget
et curl
. Ces logiciels offrent des fonctionnalités assez similaires et font partie du trousseau des indispensables d'un administrateur Linux.
wget
est un projet GNU. Ce petit logiciel permet de télécharger des fichiers en utilisant les protocoles Internet communs, comme HTTP
, ou FTP
.
Il est possible de l'installer depuis les sources, ou alors d'utiliser le package mis à disposition par les distributions. Son utilisation est assez simple et intuitive, pour télécharger un fichier, en passant l'URL complète du fichier en paramètre
curl
s'appuie sur les librairies partagées libcurl, il est diffusé sous licence MIT.
Dans le périmètre des fonctionnalités de base, il est comparable à wget
, à une différence non négligeable : il ne propose pas de téléchargement récursif. C'est la raison principale pour laquelle je choisis directement le premier plutôt que le second.
Par contre, de son côté, curl se distingue par sa liste étendue de protocoles compatibles (DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, telnet and TFTP).
Pour plus d'informations, vous pouvez vous rendre sur le site de référence de curl.
# Installer apt-get install wget # Télécharger une ressource via son URL wget "https://a-distant-ressource" # Téléchargement récursif wget -r "https://a-distant-ressource" # Spécifier les URL dans un fichier wget -i ./list.txt # Spécifier le nom du fichier en local wget -O filename "https://a-distant-ressource" # Utiliser le protocole FTP wget --ftpuser=user --ftpassword=pass "/directory/file"
Avec curl
# Installer apt-get install curl # Télécharger via une URL curl -o ~/ouputfile -O "https://a-distant-ressource" # Utiliser ftp curl --user=username:password -O "ftp://directory/file" # On peut spécifier plusieurs URL en répétant l'option -O curl -O https://url1 -O https://url2 # Pour les fichiers de taille importante l'option -C permet # de reprendre un téléchargement interrompu curl -C -O "https://url-to-big-file.iso"
Les utilitaires curl
et wget
vont surtout être utilisés pour les téléchargement de fichiers hébergés sur Internet ou via des services HTTP ou FTP. Mais il est également possible de transférer des fichiers d'un serveur ne disposant que du service SSH.
Pour cela, nous allons utiliser un autre logiciel de la brique OpenSSH : scp
.
L'objectif de scp
est de fournir une fonctionnalité de transfert de fichier sécurisée en s'appuyant sur le protocole SSH.
Pour cela, scp va tout simplement utiliser le client ssh. La seule condition de son utilisation étant bien entendu de posséder un compte de connexion et un service SSH en écoute.
Voyons maintenant comment :
# Copier le fichier local sur le serveur distant # le fichier sera la propriété de user scp ./localfile user@server:/directory/file # Récupérer le fichier distant en local scp user@serveur:/directory/file ./myLocalCopy # Spécifier le port scp -P 2202 sourceFile user@server:/directory/destinationFile # Copie récursive scp -r sourceDirectory destinationDirectory
Dernier cas de figure : vous disposez de manière tout à fait logique d'une interface graphique sur votre poste de travail. Vous pouvez alors profiter des logiciels clients graphiques permettant de transférer des fichiers.
Dans certains cas, je pense notamment aux serveurs de fichiers publics, vous allez utiliser le protocole FTP. Mais ce dernier tend à disparaître, car par défaut les flux transitant sur le réseau pendant les échanges ne sont pas chiffrés.
Il est nécessaire de coupler le serveur FTP avec un certificat TLS/SSL, pour obtenir un service FTPS. Mais c'est une autre histoire.
Par contre, sur un serveur disposant d'un accès SSH, il est possible de faire du “FTP par SSH”, aussi nommé SFTP.
Le principe est le suivant :
Alors, idem que pour scp
, SFTP
reposant sur SSH va utiliser les principes de cryptographie asymétrique. Il suffit d'utiliser un logiciel compatible pour bénéficier de ses fonctionnalités.
Par exemple, FileZilla est, à l'origine, un logiciel client pour FTP très connu, gratuit et proposé sous licence GNU, compatible avec SFTP.
Il est disponible au téléchargement et il est aussi packagé sous la plupart des distributions. Bien entendu, FileZilla supporte l'authentification par clé SSH.
Depuis la barre d'outils de FileZilla, on peut directement spécifier le protocole et la cible dans le champ Host : sftp://servername
. On renseigne les champs Username et Password et le Port du protocole SSH.
wget
et curl
permettent de télécharger des fichiers depuis un terminal via HTTP ;Votre serveur Linux propose désormais pas mal de services réseaux. Il est peut-être temps de surveiller un peu son activité. Cela tombe bien, c’est justement le sujet de la prochaine partie.