Vers le contenu
Ma Seedbox

SFTP, le transfert de fichiers chiffré par SSH

Câbles réseau bleus branchés sur les ports d’un commutateur

SFTP (SSH File Transfer Protocol) est un protocole de transfert de fichiers sécurisé : le client SFTP se connecte au serveur par SSH, sur le port 22, et chaque fichier circule chiffré. Contrairement au FTP, il ne laisse passer ni mot de passe ni donnée en clair. Il sert à envoyer, récupérer, renommer ou supprimer des fichiers sur un serveur distant, avec un mot de passe ou une clé.

Qu’est-ce que le protocole SFTP ?

SFTP, parfois appelé Secure File Transfer Protocol, est un protocole réseau qui donne un accès sécurisé aux fichiers d’un serveur : transfert, mais aussi opérations de gestion à distance, depuis une commande ou un logiciel client. Il a été conçu comme une extension de SSH version 2. Il a été développé au sein du groupe de travail SECSH de l’IETF, après un prédécesseur propriétaire publié en 1997 par SSH Communications Security. Ses brouillons successifs ont défini les versions 3 à 6 du protocole, mais aucun n’est devenu une norme officielle : il n’existe pas de RFC pour SFTP. La version 3 reste la plus répandue, parce que c’est celle qu’implémente OpenSSH, le logiciel SSH installé sur la quasi-totalité des serveurs Linux.

Contrairement à ce que son nom laisse penser, SFTP n’est pas du FTP transporté dans SSH : c’est un protocole distinct, écrit à partir de zéro, qui fonctionne comme un sous-système du serveur SSH. Le client ouvre une session SSH, s’authentifie, puis demande le sous-système sftp ; toutes les opérations sur les fichiers circulent ensuite dans ce canal chiffré. Un seul port suffit, le port TCP 22 par défaut, celui du protocole SSH lui-même.

Ce fonctionnement en fait l’outil habituel pour rapatrier des fichiers depuis un serveur distant, qu’il s’agisse d’un hébergement web, d’un serveur privé virtuel (VPS), d’un serveur dédié ou d’une seedbox, serveur loué pour stocker et transférer des fichiers. Le client SFTP voit le système de fichiers du serveur comme un dossier de son ordinateur : il peut le parcourir, en lister le contenu, télécharger ou envoyer des documents, sans ouvrir d’autre service sur la machine distante.

Comment fonctionne SFTP ?

Une session SFTP commence par l’établissement d’une connexion SSH. Le client contacte le serveur sur le port 22, les deux machines négocient les algorithmes de chiffrement, puis le serveur présente sa clé d’hôte. À la première connexion, le client affiche l’empreinte de cette clé et demande de la confirmer ; il la mémorise ensuite et alerte l’utilisateur si elle change, ce qui protège contre une usurpation du serveur.

Vient ensuite l’authentification de l’utilisateur, par mot de passe ou par clé SSH. Une fois connecté, le client envoie des requêtes au serveur : ouvrir un fichier, lire un bloc de données, écrire un bloc, lister un répertoire, créer un dossier, renommer, supprimer, modifier des droits. Chaque requête porte un numéro qui la relie à sa réponse, ce qui permet d’envoyer plusieurs requêtes sans attendre chaque réponse et d’améliorer le débit sur une liaison lointaine.

Le protocole sait aussi reprendre un transfert interrompu : le client demande la lecture d’un fichier à partir d’une position donnée, sans recommencer depuis le début. Un transfert peut être arrêté sans fermer la session, et la connexion reste ouverte pour d’autres opérations. Toutes ces données, noms de fichiers compris, sont chiffrées de bout en bout entre le client et le serveur.

Quelle est la différence entre SFTP et FTP ?

FTP (File Transfer Protocol) est un protocole bien plus ancien, décrit dans sa forme actuelle par la RFC 959 de 1985. Il utilise deux connexions : une connexion de contrôle sur le port 21, qui transporte les commandes, et une connexion de données distincte pour chaque transfert ou chaque listage de dossier. Surtout, FTP ne chiffre rien : l’identifiant, le mot de passe et le contenu des fichiers passent en clair sur le réseau, lisibles par quiconque intercepte le trafic.

FTPS ajoute à FTP une couche de chiffrement TLS, décrite par la RFC 4217 de 2005. Il protège le mot de passe et les données, mais garde l’architecture à deux connexions, avec des ports de données ouverts à la volée, ce qui complique la traversée des pare-feu et des routeurs. Ce protocole reste présent sur de nombreux hébergements web, où il sert à publier directement les fichiers d’un site. Il existe en mode explicite (le client demande le chiffrement après connexion sur le port 21) et en mode implicite (connexion chiffrée d’emblée, traditionnellement sur le port 990).

SFTP, lui, n’a rien de commun avec FTP en dehors de l’usage : un seul port, un seul canal chiffré, l’authentification de SSH et un serveur SSH déjà présent sur la plupart des machines Linux. Le tableau ci-dessous résume ces différences.

ProtocoleChiffrementPort par défautConnexions
FTPaucun21 (contrôle)contrôle et données séparés
FTPSTLS21 (explicite) ou 990 (implicite)contrôle et données séparés
SFTPSSH22un seul canal

SFTP, SCP et rsync : trois outils de la famille SSH

SCP (Secure Copy) est l’autre commande historique de copie par SSH. Elle se limite à copier des fichiers, sans pouvoir lister un dossier distant, renommer ou supprimer, et son ancien protocole dépendait de l’interprétation des caractères spéciaux par le serveur, source de problèmes de sécurité. Depuis OpenSSH 9.0, publié en avril 2022, la commande scp utilise par défaut le protocole SFTP pour ses transferts ; l’ancien protocole reste disponible avec l’option -O.

Rsync, l’outil de synchronisation de fichiers, passe lui aussi par SSH mais suit une autre logique : il compare les fichiers des deux côtés et n’envoie que les parties modifiées. Il convient pour synchroniser un dossier entier ou reprendre une sauvegarde volumineuse, là où SFTP reste plus pratique pour parcourir un serveur, récupérer quelques fichiers à la main ou travailler avec une interface graphique. Il existe d’autres implémentations du protocole SFTP qu’OpenSSH, dans des bibliothèques libres utilisées par les langages de programmation, ce qui permet à une application de lire ou déposer un fichier sur un serveur sans passer par la ligne de commande. Les trois outils utilisent la même connexion SSH, les mêmes comptes et les mêmes clés : choisir l’un n’empêche pas d’utiliser l’autre.

Comment utiliser SFTP en ligne de commande ?

Sous Linux et macOS, la commande sftp est fournie avec OpenSSH ; Windows 10 et 11 l’intègrent aussi avec le client OpenSSH, utilisable dans PowerShell ou dans l’invite de commande. La connexion se lance avec le nom de l’utilisateur et l’adresse du serveur :

sftp utilisateur@serveur.example

Si le serveur SSH écoute sur un autre port que le 22, on le précise avec l’option -P, par exemple sftp -P 2222 utilisateur@serveur.example. Une fois connecté, une invite sftp> attend les commandes. Les plus utiles sont peu nombreuses :

  • ls et cd : lister et changer de répertoire sur le serveur ; lls et lcd font de même sur l’ordinateur local ;
  • get fichier : télécharger un fichier du serveur vers le dossier local courant ; get -r dossier récupère un dossier entier ;
  • put fichier : envoyer un fichier local vers le serveur ;
  • reget et reput : reprendre un transfert interrompu là où il s’était arrêté ;
  • mkdir, rename, rm : créer un dossier, renommer ou supprimer un fichier distant ;
  • bye ou exit : fermer la session.

Par exemple, pour rapatrier l’image ISO d’une distribution Linux téléchargée sur le serveur, on se place dans le bon dossier puis on tape get debian-netinst.iso. La commande accepte aussi un fichier de commandes avec l’option -b, ce qui permet d’automatiser un transfert dans un script, par exemple une récupération nocturne de sauvegardes.

Les clients SFTP graphiques

Pour ceux qui préfèrent une interface graphique, plusieurs logiciels libres ou gratuits prennent en charge le protocole SFTP. Ils présentent en général deux panneaux, l’ordinateur local d’un côté et le serveur distant de l’autre, et transfèrent les fichiers par glisser-déposer.

  • FileZilla, client libre pour Windows, macOS et Linux, gère FTP, FTPS et SFTP. Dans la barre de connexion rapide, il suffit d’indiquer l’hôte avec le préfixe sftp://, l’identifiant, le mot de passe et le port 22. Le gestionnaire de sites garde ensuite les paramètres de chaque serveur, y compris le chemin d’une clé privée.
  • WinSCP, client libre pour Windows, gère SFTP, SCP, FTP et WebDAV, et sait synchroniser un dossier local avec un dossier distant.
  • Cyberduck, pour macOS et Windows, se connecte en SFTP comme à des services de stockage en ligne.
  • Les gestionnaires de fichiers de Linux, comme Fichiers sous GNOME ou Dolphin sous KDE, ouvrent directement une adresse sftp://utilisateur@serveur et affichent le dossier distant comme un dossier local.

Il n’existe pas de logiciel SFTP qui convienne à tous : le bon outil est celui qui s’intègre à l’environnement de travail. FileZilla sert souvent de point de départ parce qu’il fonctionne sur les trois systèmes, mais un utilisateur à l’aise avec la ligne de commande se contentera de sftp ou de rsync. Côté serveur, attention à une confusion fréquente : la version gratuite de FileZilla Server ne gère que FTP et FTPS, pas SFTP ; un serveur SFTP repose le plus souvent sur OpenSSH.

Se connecter en SFTP avec une clé SSH

L’authentification par clé remplace le mot de passe par une paire de clés : une clé privée, gardée sur l’ordinateur de l’utilisateur, et une clé publique, déposée sur le serveur. À la connexion, le serveur vérifie que le client détient bien la clé privée sans que celle-ci circule sur le réseau. Une clé est bien plus difficile à deviner qu’un mot de passe, et elle évite de le saisir à chaque transfert.

Créer une paire de clés ne prend qu’une minute. Elle se crée avec la commande ssh-keygen -t ed25519, qui propose de protéger la clé privée par une phrase secrète, à ne pas laisser vide sur un ordinateur portable. La clé publique s’installe ensuite sur le serveur avec ssh-copy-id utilisateur@serveur.example, ou à la main en l’ajoutant au fichier ~/.ssh/authorized_keys du compte distant. Les connexions suivantes en SFTP utilisent automatiquement cette clé.

FileZilla accepte une clé privée au format OpenSSH ou au format PPK de PuTTY ; WinSCP fournit un outil pour convertir l’une en l’autre. Une fois la connexion par clé vérifiée, l’administrateur du serveur peut désactiver l’authentification par mot de passe dans la configuration de SSH, ce qui ferme la porte aux tentatives de connexion automatiques qui visent le port 22 de tout serveur exposé sur internet.

SFTP est-il sécurisé ?

SFTP protège la confidentialité et l’intégrité des données en transit : le contenu des fichiers, leurs noms et les identifiants circulent dans un canal chiffré, et toute modification en route serait détectée. La vérification de la clé d’hôte empêche aussi un tiers de se faire passer pour le serveur, à condition de ne pas accepter sans réfléchir une empreinte qui a changé.

La sécurité réelle dépend pourtant de la configuration. Un mot de passe faible reste devinable, même chiffré ; un serveur SSH non mis à jour peut porter une faille connue ; un compte SFTP qui donne accès à tout le système de fichiers expose plus que nécessaire. Quelques mesures simples limitent ces risques :

  • préférer la clé SSH au mot de passe, et désactiver la connexion directe du compte root ;
  • tenir à jour OpenSSH et le système du serveur ;
  • limiter les tentatives de connexion avec un outil comme fail2ban, ou n’autoriser le port 22 qu’à certaines adresses ;
  • donner à chaque utilisateur le seul accès dont il a besoin, par exemple un compte limité au transfert de fichiers.

SFTP ne rend pas non plus anonyme : le serveur connaît l’adresse IP du client et l’hébergeur sait quels comptes se connectent. Le chiffrement protège le contenu du transfert, pas la légalité de ce qui est transféré.

Comment configurer un serveur SFTP ?

Sur un serveur Linux, il n’y a en général rien à installer : le serveur OpenSSH (sshd) contient déjà le sous-système SFTP, activé par défaut. Tout compte autorisé à se connecter en SSH peut donc transférer des fichiers en SFTP dès que le service tourne et que le port 22 est ouvert dans le pare-feu.

Pour un compte qui ne doit faire que du transfert de fichiers, sans accès au terminal, OpenSSH propose le mode internal-sftp et la directive ChrootDirectory. Dans le fichier de configuration /etc/ssh/sshd_config, un bloc Match User ou Match Group associe à ces comptes la commande ForceCommand internal-sftp et un répertoire racine dont ils ne peuvent pas sortir. Le dossier choisi comme racine doit appartenir à root et ne pas être modifiable par l’utilisateur ; on crée à l’intérieur un sous-dossier, lui en écriture, pour ses fichiers. Après chaque modification, la commande sshd -t vérifie la syntaxe avant de relancer le service.

Sur Windows, le serveur OpenSSH fait partie des fonctionnalités facultatives du système depuis Windows 10 et Windows Server 2019 ; une fois activé, il accepte aussi les connexions SFTP. Sur un NAS, l’option se trouve le plus souvent dans les réglages des services de fichiers, à côté de FTP et de SMB.

Rapatrier les fichiers d’un serveur distant en SFTP

Le cas le plus courant pour les lecteurs de ce site est celui d’un serveur loué qui télécharge des fichiers volumineux et les garde jusqu’à ce que leur propriétaire les récupère. Le client BitTorrent du serveur, comme qBittorrent et son interface web, dépose ses fichiers dans un dossier ; l’utilisateur s’y connecte ensuite en SFTP pour les copier sur son ordinateur ou son NAS, avec les mêmes identifiants que pour SSH.

Pour de gros volumes, le nombre de transferts simultanés compte autant que le débit : FileZilla permet de régler ce nombre dans ses paramètres, et la ligne de commande accepte l’option -R qui fixe le nombre de requêtes en attente. Un transfert coupé par une perte de connexion se reprend avec reget ou, dans FileZilla, en choisissant de reprendre le fichier existant plutôt que de l’écraser. Pour des fichiers personnels ou des sauvegardes, le chiffrement de SFTP évite qu’ils transitent en clair entre le centre de données et le domicile.

Le transfert ne change rien à la nature du contenu. Rapatrier par SFTP une distribution Linux, une archive de photos ou une œuvre sous licence libre est parfaitement légal ; une œuvre protégée récupérée sans l’accord de ses ayants droit reste une contrefaçon, que le fichier soit passé par BitTorrent, par un serveur de téléchargement BitTorrent ou par un canal chiffré.

SFTP en entreprise : flux automatisés et données sensibles

Dans une entreprise, SFTP sert souvent de point d’échange entre deux systèmes d’information : un partenaire dépose chaque nuit un fichier de commandes, une banque récupère un relevé, un logiciel de paie envoie ses données à un prestataire. Ces flux de travail tournent sans intervention humaine, par un script ou un outil d’intégration qui se connecte avec une clé, dépose le document dans un répertoire convenu puis le déplace une fois traité. Le protocole s’intègre ainsi à l’infrastructure existante, puisque le serveur SSH est déjà présent sur les machines Linux.

Les données sensibles (fichiers clients, informations de santé, documents comptables) justifient ce choix : le chiffrement en transit répond aux exigences de confidentialité, et l’authentification par clé laisse une trace de chaque connexion dans les journaux du serveur. L’expérience montre toutefois que la sécurité tient surtout à l’organisation : un compte par partenaire, un chemin d’accès limité à son dossier, des clés renouvelées et retirées quand un prestataire part. Plusieurs produits commerciaux de transfert de fichiers géré reposent eux aussi sur SFTP, avec une console d’administration, un suivi des transferts et des alertes, mais l’implémentation libre d’OpenSSH suffit à la plupart des besoins techniques.

Le stockage en cloud a également adopté le protocole : certains services de stockage d’objets proposent un accès SFTP, ce qui permet à une application ancienne de déposer ses fichiers dans le cloud sans modification de son code. Pour l’utilisateur, rien ne change : il crée sa connexion, indique l’hôte, le port, l’identifiant et la clé, puis travaille comme sur n’importe quel serveur.

Les erreurs SFTP les plus fréquentes

Un message « Connection refused » signifie que rien n’écoute sur le port visé : le service SSH est arrêté, le port n’est pas le bon ou un pare-feu bloque la connexion. « Permission denied » indique un identifiant, un mot de passe ou une clé refusés ; avec une clé, il faut vérifier que le fichier authorized_keys et le dossier .ssh du serveur ont des droits restreints, sans quoi OpenSSH ignore la clé.

Une alerte sur une clé d’hôte modifiée demande de la prudence : elle apparaît après une réinstallation du serveur, mais elle peut aussi signaler une interception. Mieux vaut confirmer la nouvelle empreinte auprès de l’administrateur avant de supprimer l’ancienne ligne du fichier known_hosts. Enfin, un client FTP qui tente de joindre un serveur SFTP sur le port 21, ou l’inverse, échoue toujours : le protocole choisi dans le client doit correspondre à celui du serveur.

SFTP en pratique : questions courantes

Quel port utilise SFTP ?

Le port TCP 22, celui de SSH, sauf si l’administrateur du serveur a choisi un autre port dans la configuration de SSH.

Faut-il un serveur FTP pour faire du SFTP ?

Non. SFTP est fourni par le serveur SSH, en général OpenSSH ; aucun serveur FTP n’est nécessaire, et un serveur FTP seul ne sait pas répondre en SFTP.

FileZilla gère-t-il SFTP ?

Oui, le client FileZilla se connecte en SFTP avec un mot de passe ou une clé privée. La version gratuite de FileZilla Server, en revanche, ne propose que FTP et FTPS.

PartagerFacebookXLinkedInPinterest
↑