15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
30.10.2024
3 +1

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éFTPSFTP
ChiffrementAucun (texte clair)Chiffrement SSH complet
Ports requis20 + 21 (+ plage passive)22 (port unique)
AuthentificationNom d’utilisateur/mot de passe uniquementMot de passe, clé SSH, 2FA
Compatibilité pare-feuComplexeSimple
Intégrité des donnéesNon garantieVé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 :

  1. Une connexion TCP est établie vers le port 22 du serveur distant.
  2. 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.
  3. L’authentification est effectuée — soit par mot de passe, soit par paire de clés publique/privée.
  4. Le sous-système SFTP est invoqué au sein de la session SSH authentifiée.
  5. 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 -y

Vérifier que le service est en cours d’exécution

sudo systemctl status ssh

Vous 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 ssh

Vé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_config

Vous devriez voir une ligne similaire à :

Subsystem sftp /usr/lib/openssh/sftp-server

Si 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/uploads

Configurer 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 no

Cette 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 ed25519

Cela 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-ip

Vous 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_ip

Exemple :

sftp sftpuser@203.0.113.45

Connexion 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.45

Connexion 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.

# 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
lpwd

Envoi 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.txt

Quitter 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.

  1. Ouvrez FileZilla et accédez à Fichier → Gestionnaire de sites.
  2. Cliquez sur Nouveau site et donnez-lui un nom descriptif.
  3. Définissez le Protocole sur SFTP – SSH File Transfer Protocol.
  4. Saisissez votre Hôte (adresse IP ou domaine) et le Port (par défaut : 22).
  5. Définissez le Type d’authentification sur Key file pour l’authentification par clé SSH, ou Normal pour l’authentification par mot de passe.
  6. Saisissez votre Nom d’utilisateur et accédez à votre fichier de clé privée si vous utilisez l’authentification par clé.
  7. 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.

  1. Ouvrez WinSCP et créez une Nouvelle session.
  2. Définissez le Protocole de fichier sur SFTP.
  3. 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).
  4. 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>&1

Durcissement 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 2222

2. 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 22

3. 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 fail2ban

4. Désactiver la connexion root via SSH

# In /etc/ssh/sshd_config
PermitRootLogin no

5. 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 4096

6. 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_ed25519

Principaux 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 à root avec les permissions 755
  • Consultez /var/log/auth.log pour 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, rsync via 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 3

Comparaison entre SFTP, FTPS et SCP

SFTPFTPSSCP
Base du protocoleSSHSSL/TLS over FTPSSH
Ports1 (port 22)2+ (21 + ports de données)1 (port 22)
Reprise des transfertsOuiDépend du clientNon
Listage des répertoiresOuiOuiNon
Session interactiveOuiOuiNon
Compatibilité pare-feuExcellenteModéréeExcellente
Certificat requisNonOuiNon

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.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer