Protocole SFTP : Le Guide Complet pour les Transferts de Fichiers Sécurisés sur Votre VPS
Le transfert de fichiers vers et depuis votre serveur est l’une des tâches les plus courantes en hébergement web et en administration système — pourtant, c’est aussi l’une des plus fréquemment mal gérées du point de vue de la sécurité. Les protocoles hérités comme FTP transmettent les identifiants et les données en texte clair, laissant votre serveur totalement exposé aux interceptions. SFTP (SSH File Transfer Protocol) élimine entièrement ce risque en acheminant chaque octet de données à travers un tunnel SSH chiffré.
Ce guide couvre tout ce que vous devez savoir sur SFTP : son fonctionnement interne, comment le configurer sur un VPS Linux, comment se connecter avec des outils en ligne de commande et des clients graphiques, et pourquoi il devrait être votre méthode par défaut pour toutes les opérations de transfert de fichiers.
Qu’est-ce que SFTP et en quoi diffère-t-il de FTP ?
SFTP signifie SSH File Transfer Protocol. Malgré le nom similaire, il ne s’agit pas d’une simple extension du protocole FTP traditionnel — c’est un protocole entièrement distinct, conçu de zéro pour fonctionner via SSH (Secure Shell). Cette distinction a une importance considérable en pratique.
| Fonctionnalité | FTP | SFTP |
|---|---|---|
| Chiffrement | Aucun (texte clair) | Chiffrement SSH complet |
| Ports requis | 20 + 21 (+ plage passive) | 22 (port unique) |
| Authentification | Nom d’utilisateur/mot de passe uniquement | Mot de passe, clé SSH, 2FA |
| Compatibilité pare-feu | Complexe | Simple |
| Intégrité des données | Non garantie | Vérifiée cryptographiquement |
Le FTP traditionnel envoie votre nom d’utilisateur, votre mot de passe et toutes les données de fichiers en texte clair. Toute personne effectuant une capture de paquets sur le même segment réseau peut lire vos identifiants instantanément. SFTP chiffre l’intégralité de la session — authentification, commandes et données de fichiers — en utilisant la même cryptographie éprouvée qui sécurise les connexions SSH dans le monde entier.
Fonctionnement de SFTP : aperçu technique
Lorsque vous initiez une session SFTP, la séquence suivante se produit :
- Une connexion TCP est établie vers le port 22 du serveur distant.
- La négociation SSH a lieu : le serveur présente sa clé hôte, et le client la vérifie par rapport aux hôtes connus pour prévenir les attaques de type man-in-the-middle.
- L’authentification est effectuée — soit par mot de passe, soit par paire de clés publique/privée.
- Le sous-système SFTP est invoqué au sein de la session SSH authentifiée.
- Les opérations sur les fichiers (envoi, téléchargement, renommage, suppression, listage des répertoires) sont effectuées via le canal chiffré.
L’intégralité de la session, de l’authentification au dernier octet de données transféré, est protégée par un chiffrement symétrique négocié lors de la négociation SSH. Aucun identifiant ni contenu de fichier ne transite jamais en texte clair.
Étape 1 : Installation et configuration du serveur OpenSSH
La plupart des distributions Linux modernes — notamment Ubuntu et Debian — sont livrées avec OpenSSH préinstallé ou facilement disponible dans leurs dépôts de paquets. Si vous utilisez une nouvelle instance d’hébergement VPS, vérifiez que le serveur OpenSSH est présent et en cours d’exécution.
Installer OpenSSH sur Ubuntu/Debian
sudo apt update && sudo apt install openssh-server -yVérifier que le service est en cours d’exécution
sudo systemctl status sshVous devriez voir active (running) dans la sortie. Si le service n’est pas en cours d’exécution, démarrez-le et activez-le :
sudo systemctl start ssh
sudo systemctl enable sshVérifier que SFTP est activé
OpenSSH inclut la prise en charge de SFTP via un sous-système intégré. Confirmez qu’il est configuré dans /etc/ssh/sshd_config :
grep -i sftp /etc/ssh/sshd_configVous devriez voir une ligne similaire à :
Subsystem sftp /usr/lib/openssh/sftp-serverSi cette ligne est absente ou commentée, ajoutez-la et redémarrez le démon SSH :
sudo systemctl restart sshÉtape 2 : Création d’un utilisateur SFTP dédié (bonne pratique)
Plutôt que d’utiliser votre compte root ou un compte administrateur général pour les transferts de fichiers, créez un utilisateur SFTP dédié avec un accès restreint. Cela limite les dégâts potentiels si les identifiants venaient à être compromis.
Créer l’utilisateur et définir un répertoire personnel
sudo adduser sftpuser
sudo mkdir -p /var/sftp/uploads
sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp
sudo chown sftpuser:sftpuser /var/sftp/uploadsConfigurer le chroot jail dans sshd_config
Ouvrez /etc/ssh/sshd_config et ajoutez le bloc suivant à la fin du fichier :
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding noCette configuration confine l’utilisateur dans /var/sftp, l’empêchant de naviguer vers d’autres parties du système de fichiers. Redémarrez SSH pour appliquer les modifications :
sudo systemctl restart sshÉtape 3 : Configuration de l’authentification par clé SSH pour SFTP
L’authentification par mot de passe est pratique, mais moins sécurisée que l’authentification par clé. Pour les environnements de production, les paires de clés SSH sont fortement recommandées.
Générer une paire de clés SSH sur votre machine locale
Sur Linux ou macOS :
ssh-keygen -t ed25519 -C "sftp-key-$(date +%Y%m%d)"Sur Windows (PowerShell ou Windows Terminal) :
ssh-keygen -t ed25519Cela génère deux fichiers : une clé privée (gardez-la secrète, ne la partagez jamais) et une clé publique (se terminant par .pub).
Copier la clé publique sur le serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub sftpuser@your-server-ipVous pouvez également ajouter manuellement la clé publique dans ~/.ssh/authorized_keys sur le serveur.
Désactiver l’authentification par mot de passe (optionnel mais recommandé)
Une fois l’authentification par clé confirmée comme fonctionnelle, désactivez la connexion par mot de passe pour l’utilisateur SFTP dans sshd_config en remplaçant PasswordAuthentication yes par PasswordAuthentication no dans le bloc Match User.
Étape 4 : Connexion à SFTP depuis la ligne de commande
Le client SFTP en ligne de commande est disponible nativement sur Linux et macOS, et est inclus avec OpenSSH sur Windows 10/11.
Syntaxe de connexion de base
sftp username@hostname_or_ipExemple :
sftp sftpuser@203.0.113.45Connexion sur un port non standard
Si votre démon SSH écoute sur un port autre que 22 (mesure de durcissement de sécurité courante) :
sftp -P 2222 sftpuser@203.0.113.45Connexion avec une clé SSH
sftp -i ~/.ssh/id_ed25519 sftpuser@203.0.113.45Étape 5 : Commandes SFTP essentielles
Une fois connecté, vous opérez dans un shell SFTP interactif. Les commandes suivantes couvrent la grande majorité des tâches quotidiennes de gestion de fichiers.
Navigation
# List files on the remote server
ls
ls -la
# Change remote directory
cd /var/sftp/uploads
# Show current remote directory
pwd
# List files on your local machine
lls
# Change local directory
lcd ~/Downloads
# Show current local directory
lpwdEnvoi de fichiers
# Upload a single file
put localfile.txt
# Upload a file to a specific remote path
put localfile.txt /var/sftp/uploads/localfile.txt
# Upload an entire directory recursively
put -r /local/directory /var/sftp/uploads/Téléchargement de fichiers
# Download a single file to the current local directory
get remotefile.txt
# Download a file to a specific local path
get remotefile.txt ~/Downloads/remotefile.txt
# Download an entire directory recursively
get -r /var/sftp/uploads/ ~/local-backup/Gestion des fichiers et répertoires
# Create a remote directory
mkdir new-folder
# Remove a remote file
rm old-file.txt
# Remove a remote directory
rmdir empty-folder
# Rename or move a file
rename old-name.txt new-name.txtQuitter la session
exit
# or
bye
# or press Ctrl+DÉtape 6 : Connexion avec des clients graphiques
SFTP en ligne de commande est puissant, mais les clients graphiques sont souvent plus pratiques pour gérer un grand nombre de fichiers ou pour les membres d’une équipe moins à l’aise avec le terminal.
FileZilla (Windows, macOS, Linux)
FileZilla est l’un des clients SFTP gratuits les plus utilisés.
- Ouvrez FileZilla et accédez à Fichier → Gestionnaire de sites.
- Cliquez sur Nouveau site et donnez-lui un nom descriptif.
- Définissez le Protocole sur
SFTP – SSH File Transfer Protocol. - Saisissez votre Hôte (adresse IP ou domaine) et le Port (par défaut : 22).
- Définissez le Type d’authentification sur
Key filepour l’authentification par clé SSH, ouNormalpour l’authentification par mot de passe. - Saisissez votre Nom d’utilisateur et accédez à votre fichier de clé privée si vous utilisez l’authentification par clé.
- Cliquez sur Connexion.
Vous pouvez maintenant glisser-déposer des fichiers entre votre machine locale (panneau gauche) et le serveur distant (panneau droit).
WinSCP (Windows)
WinSCP est une alternative populaire réservée à Windows, avec une interface à double panneau et une forte intégration avec les formats de clés PuTTY.
- Ouvrez WinSCP et créez une Nouvelle session.
- Définissez le Protocole de fichier sur
SFTP. - Saisissez le Nom d’hôte, le Numéro de port, le Nom d’utilisateur et le Mot de passe (ou configurez une clé SSH via Avancé → SSH → Authentification).
- Cliquez sur Connexion.
Cyberduck (macOS, Windows)
Cyberduck est un client moderne et épuré qui prend en charge SFTP ainsi que S3, FTP et d’autres protocoles. Connectez-vous en cliquant sur Ouvrir une connexion, en sélectionnant SFTP (SSH File Transfer Protocol) et en saisissant vos identifiants de serveur.
Automatisation des transferts SFTP avec des scripts
Pour les tâches récurrentes telles que les sauvegardes, la collecte de journaux ou les pipelines de déploiement, vous pouvez automatiser les transferts SFTP à l’aide de scripts shell combinés à l’authentification par clé SSH (aucune invite de mot de passe requise).
Exemple : script de sauvegarde automatisé
#!/bin/bash
# Configuration
REMOTE_USER="sftpuser"
REMOTE_HOST="203.0.113.45"
REMOTE_DIR="/var/sftp/uploads/backups"
LOCAL_BACKUP_DIR="/var/backups/myapp"
SSH_KEY="/root/.ssh/id_ed25519"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_${DATE}.tar.gz"
# Create the backup archive
tar -czf "/tmp/${BACKUP_FILE}" "${LOCAL_BACKUP_DIR}"
# Upload via SFTP
sftp -i "${SSH_KEY}" "${REMOTE_USER}@${REMOTE_HOST}" <<EOF
cd ${REMOTE_DIR}
put /tmp/${BACKUP_FILE}
bye
EOF
# Clean up local temp file
rm "/tmp/${BACKUP_FILE}"
echo "Backup ${BACKUP_FILE} uploaded successfully."Planifiez l’exécution nocturne avec une tâche cron :
crontab -e
# Add:
0 2 * * * /usr/local/bin/backup-sftp.sh >> /var/log/sftp-backup.log 2>&1Durcissement de la sécurité pour SFTP en production
L’exécution de SFTP sur un serveur de production nécessite plus que la configuration par défaut. Appliquez ces mesures de durcissement pour réduire significativement votre surface d’attaque.
1. Changer le port SSH par défaut
Changer le port 22 pour un port non standard (par exemple, 2222 ou 22222) réduit considérablement les tentatives de force brute automatisées :
# In /etc/ssh/sshd_config
Port 22222. Restreindre l’accès SFTP par adresse IP
Si votre équipe se connecte depuis des adresses IP connues, restreignez l’accès SSH/SFTP en utilisant UFW ou /etc/hosts.allow :
sudo ufw allow from 203.0.113.10 to any port 22
sudo ufw deny 223. Mettre en place Fail2Ban
Fail2Ban surveille les journaux d’authentification et bannit automatiquement les adresses IP après un nombre configurable de tentatives de connexion échouées :
sudo apt install fail2ban -y
sudo systemctl enable fail2ban4. Désactiver la connexion root via SSH
# In /etc/ssh/sshd_config
PermitRootLogin no5. Utiliser des algorithmes de clés SSH robustes
Préférez les clés ed25519 ou ecdsa à l’algorithme rsa plus ancien. Lors de la génération de clés, utilisez toujours au moins 4096 bits pour RSA :
ssh-keygen -t ed25519
# or
ssh-keygen -t rsa -b 40966. Définir les permissions de fichiers appropriées
Assurez-vous que les fichiers de configuration SSH disposent des permissions correctes pour empêcher toute modification non autorisée :
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_ed25519Principaux avantages de SFTP par rapport aux protocoles alternatifs
Sécurité
SFTP chiffre à la fois le canal de contrôle et le canal de données via SSH. Il n’existe aucun scénario dans lequel les identifiants ou le contenu des fichiers transitent en texte clair. Cela le rend catégoriquement plus sûr que FTP et plus simple à sécuriser que FTPS (FTP over SSL/TLS), qui nécessite la gestion de certificats et l’utilisation de plusieurs ports.
Compatibilité avec les pare-feux et NAT
FTP en mode passif nécessite l’ouverture d’une plage de ports de données sur le pare-feu, ce qui représente une charge administrative significative et une surface d’attaque plus large. SFTP utilise un seul port (22 par défaut), ce qui rend les règles de pare-feu simples et prévisibles.
Authentification unifiée avec SSH
Étant donné que SFTP fonctionne via SSH, il hérite de l’ensemble de l’écosystème d’authentification : authentification par mot de passe, authentification par clé publique, authentification par certificat et authentification à deux facteurs. Si vous gérez déjà l’accès SSH à votre serveur, SFTP ne nécessite aucune infrastructure d’authentification supplémentaire.
Intégrité des données
La couche de transport SSH inclut des codes d’authentification de message (MAC) qui vérifient l’intégrité de chaque paquet. Cela signifie que non seulement vos données sont chiffrées en transit, mais que toute altération ou corruption est détectée et le transfert est interrompu.
Reprise des transferts
Contrairement au FTP de base, SFTP prend en charge la reprise des transferts interrompus, ce qui est essentiel lors de l’envoi de fichiers volumineux via des connexions peu fiables.
SFTP dans le contexte de votre infrastructure d’hébergement
SFTP n’est pas seulement un outil autonome — il s’intègre naturellement dans un flux de travail d’hébergement et de déploiement plus large. Voici les cas d’utilisation les plus courants :
Gestion de WordPress et des CMS : Envoyez des thèmes, des plugins et des fichiers médias directement sur votre serveur sans dépendre d’un panneau de contrôle d’hébergement. Cela est particulièrement utile lorsque vous travaillez avec un VPS avec cPanel ou d’autres environnements de panneau de contrôle où vous avez besoin d’un accès direct au système de fichiers.
Déploiement d’applications : Transférez des ressources compilées, des fichiers de configuration ou des répertoires d’application entiers vers votre serveur dans le cadre d’un pipeline de déploiement.
Sauvegardes de bases de données et de configurations : Automatisez le transfert des dumps de bases de données et des sauvegardes de configuration vers un emplacement de stockage distant en utilisant l’approche de script décrite ci-dessus.
Collecte de journaux : Récupérez les journaux du serveur sur votre machine locale pour analyse sans accorder un accès SSH étendu aux analystes.
Publication de sites statiques : Déployez des sites web statiques générés par des outils comme Hugo, Jekyll ou Next.js directement à la racine web de votre serveur.
Si vous gérez plusieurs projets ou avez besoin d’environnements isolés pour différents clients, un plan d’hébergement VPS vous offre l’accès root et la flexibilité nécessaires pour configurer SFTP exactement selon les besoins de votre flux de travail — y compris les chroot jails, les permissions par utilisateur et les configurations de ports personnalisés.
Pour les équipes gérant un grand nombre de domaines et de sites web, associer l’accès SFTP à un hébergement web mutualisé ou à un environnement dédié garantit que les transferts de fichiers restent rapides, chiffrés et traçables.
Résolution des problèmes SFTP courants
« Connexion refusée » sur le port 22
- Vérifiez que le service SSH est en cours d’exécution :
sudo systemctl status ssh - Vérifiez que le port 22 est ouvert dans votre pare-feu :
sudo ufw status - Confirmez que vous vous connectez à la bonne adresse IP
« Permission refusée » lors de l’envoi de fichiers
- Vérifiez que le répertoire de destination existe et est accessible en écriture par l’utilisateur SFTP
- Vérifiez la propriété du répertoire chroot : la racine du chroot doit appartenir à
rootavec les permissions755 - Consultez
/var/log/auth.logpour des messages d’erreur détaillés
« Échec de la vérification de la clé hôte »
- La clé hôte du serveur a changé (possible après une réinstallation ou une réaffectation d’IP)
- Supprimez l’ancienne clé :
ssh-keygen -R hostname_or_ip - Reconnectez-vous et acceptez la nouvelle clé hôte
Vitesses de transfert lentes
- Testez indépendamment le débit de votre réseau pour exclure un problème de connectivité
- Envisagez d’activer la compression SSH pour les transferts à forte teneur en texte :
sftp -C username@hostname - Pour les fichiers très volumineux,
rsyncvia SSH peut être plus efficace que SFTP
« Broken pipe » ou déconnexions pendant le transfert
- Augmentez les paramètres de keepalive SSH dans
~/.ssh/config:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3Comparaison entre SFTP, FTPS et SCP
| SFTP | FTPS | SCP | |
|---|---|---|---|
| Base du protocole | SSH | SSL/TLS over FTP | SSH |
| Ports | 1 (port 22) | 2+ (21 + ports de données) | 1 (port 22) |
| Reprise des transferts | Oui | Dépend du client | Non |
| Listage des répertoires | Oui | Oui | Non |
| Session interactive | Oui | Oui | Non |
| Compatibilité pare-feu | Excellente | Modérée | Excellente |
| Certificat requis | Non | Oui | Non |
SCP (Secure Copy Protocol) est plus rapide pour les copies de fichiers simples, mais ne dispose pas des capacités de session interactive de SFTP. Il ne peut pas lister les répertoires, reprendre les transferts ni gérer les fichiers distants. Utilisez SCP pour des copies ponctuelles rapides ; utilisez SFTP pour la gestion interactive de fichiers et l’automatisation.
FTPS ajoute le chiffrement TLS au protocole FTP traditionnel. Il nécessite la gestion de certificats SSL (envisagez de l’associer à des certificats SSL pour votre domaine) et est plus complexe à configurer à travers les pare-feux. SFTP est généralement préféré pour les nouveaux déploiements, sauf si vous avez une exigence spécifique de compatibilité FTPS.
Foire aux questions
SFTP est-il identique à FTPS ?
Non. SFTP (SSH File Transfer Protocol) est un protocole entièrement distinct qui fonctionne via SSH. FTPS est FTP avec le chiffrement TLS/SSL superposé. Ils sont incompatibles entre eux.
SFTP nécessite-t-il un port distinct de SSH ?
Non. SFTP fonctionne via la même connexion SSH sur le port 22. Aucun port supplémentaire n’a besoin d’être ouvert.
Puis-je utiliser SFTP avec l’authentification à deux facteurs ?
Oui. Étant donné que SFTP utilise SSH pour l’authentification, toute méthode 2FA prise en charge par SSH (comme TOTP via Google Authenticator ou Duo) peut également être appliquée aux sessions SFTP.
SFTP est-il adapté au transfert de fichiers volumineux ?
Oui. SFTP prend en charge les transferts de fichiers volumineux et peut reprendre les transferts interrompus, ce qui le rend fiable pour les envois et téléchargements importants.
Puis-je restreindre un utilisateur SFTP à un répertoire spécifique ?
Oui. La configuration du chroot jail décrite à l’étape 2 de ce guide confine l’utilisateur à un répertoire désigné, empêchant l’accès au reste du système de fichiers.
Conclusion
SFTP est la référence en matière de transferts de fichiers sécurisés dans les environnements de serveurs Linux. En combinant la simplicité de la gestion de fichiers à la manière de FTP avec la robustesse cryptographique de SSH, il élimine les vulnérabilités les plus significatives des protocoles en texte clair tout en restant simple à configurer et à utiliser.
Les points clés à retenir de ce guide :
- Installez OpenSSH sur votre serveur — la prise en charge de SFTP est incluse automatiquement
- Créez un utilisateur SFTP dédié avec un chroot jail pour les environnements de production
- Utilisez l’authentification par clé SSH plutôt que des mots de passe dans la mesure du possible
- Appliquez des mesures de durcissement de la sécurité : changez le port par défaut, mettez en place Fail2Ban, désactivez la connexion root
- Automatisez les transferts récurrents avec des scripts shell et des tâches cron
- Choisissez le bon client — CLI pour les scripts et l’automatisation, FileZilla ou WinSCP pour une utilisation interactive
Que vous gériez une installation WordPress, déployiez une application web ou automatisiez des sauvegardes de serveur, SFTP offre la sécurité, la fiabilité et la flexibilité que votre flux de travail exige. Associez-le à un environnement d’hébergement VPS haute performance avec stockage SSD, protection DDoS et accès root complet, et vous disposez d’une configuration de transfert de fichiers à la fois rapide et véritablement sécurisée.
Pour les équipes ayant des besoins d’infrastructure plus complexes — notamment des applications à fort trafic ou des charges de travail gourmandes en ressources — explorez les serveurs dédiés pour des performances et une isolation maximales, ou consultez les panneaux de contrôle VPS disponibles pour trouver l’interface de gestion qui correspond le mieux au flux de travail de votre équipe.
