Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Transférer des fichiers avec SFTP

Par mis à jour le

Améliorer cette page

sftp est le mode interactif du transfert de fichiers SSH. Là où scp copie un fichier en une commande, sftp vous ouvre une session dans laquelle vous naviguez, listez, créez des répertoires et transférez plusieurs fichiers sans vous déconnecter. C'est l'équivalent d'un client FTP classique, mais entièrement chiffré via SSH.

sftp fait partie du client OpenSSH, que vise l'objectif LFCS « Configure the OpenSSH server and client » du domaine Networking. Toutes les mesures de cette page ont été faites sur OpenSSH 9.6 (Ubuntu 24.04), 9.9 (AlmaLinux 10) et 10.0 (Debian 13), qui se comportent de la même façon.

  • Ouvrir une session SFTP et se repérer dans les répertoires local et distant
  • Lister, naviguer et créer des répertoires côté distant et local
  • Uploader des fichiers avec put et télécharger avec get
  • Transférer un répertoire complet avec put -r / get -r
  • Utiliser un port SSH personnalisé avec -P
  • Reprendre un transfert interrompu avec reget / reput
  • Choisir entre SFTP, SCP et rsync selon la situation

Les quatre outils ci-dessous passent tous par SSH et utilisent donc le même port et les mêmes clés. Ce qui les sépare, c'est le mode d'interaction : sftp ouvre une session que vous pilotez commande par commande, alors que scp, rsync et le tandem tar/ssh s'exécutent en une seule invocation puis rendent la main. Choisissez la ligne qui correspond à ce que vous ignorez encore : si vous ne savez pas quels fichiers récupérer, il faut une session.

OutilModeSpécialitéQuand l'utiliser
sftpInteractifSession de navigation + transferts multiplesExplorer un serveur distant, plusieurs fichiers en une session
scpOne-shotCopie rapide d'un fichier ou dossierTransfert ponctuel, scripting simple
rsyncSynchronisationDelta, reprise, bande passante contrôléeBackups récurrents, gros volumes
tar + sshPipelineArborescences avec permissions complexesMigrations, archives sur mesure

SFTP est le bon choix quand :

  • Vous devez explorer un serveur distant avant de décider quoi transférer
  • Vous transférez plusieurs fichiers dans différents répertoires en une session
  • Vous gérez des serveurs où seul le port 22 est ouvert (pas de NFS ni de partage Samba)
  • Vous automatisez des transferts avec des outils qui supportent le protocole SFTP

La syntaxe de connexion est identique à celle de ssh : utilisateur, arobase, hôte. L'authentification se joue exactement de la même façon (clé publique, puis mot de passe en repli), et la clé d'hôte est vérifiée dans ~/.ssh/known_hosts. Si ssh bob@serveur.example.com fonctionne, sftp fonctionnera aussi.

Fenêtre de terminal
sftp bob@serveur.example.com

Vous arrivez dans un prompt interactif :

Connected to serveur.example.com.
sftp>

Sans cette option, le client tente le port 22 et échoue sur un Connection refused si le serveur écoute ailleurs.

Fenêtre de terminal
sftp -P 2222 bob@serveur.example.com

Utile quand vous détenez plusieurs clés privées : -i désigne celle à présenter, au lieu de laisser l'agent SSH les essayer toutes et se faire couper par le serveur au bout de six tentatives.

Fenêtre de terminal
sftp -i ~/.ssh/id_rsa_backup bob@serveur.example.com

Une fois connecté, vous manipulez deux répertoires courants simultanés, l'un distant, l'autre local, et chacun conserve sa position pendant toute la session. Les transferts se font toujours entre ces deux points, ce qui permet d'enchaîner plusieurs get sans jamais retaper un chemin complet. Vous avez donc accès à deux espaces :

  • Le serveur distant, commandé par les commandes SFTP standard
  • Votre machine locale, pilotée par les mêmes commandes préfixées d'un l (local)

Retenez la règle du préfixe l : la même commande sans préfixe agit sur le serveur, avec préfixe sur votre poste.

sftp> pwd # Répertoire courant DISTANT
sftp> lpwd # Répertoire courant LOCAL
sftp> ls # Lister les fichiers distants
sftp> ls -la # Avec détails et fichiers cachés
sftp> lls # Lister les fichiers locaux
sftp> cd /var/log/ # Changer de répertoire distant
sftp> lcd ~/Downloads/ # Changer de répertoire local
sftp> mkdir saves # Créer un répertoire distant
sftp> rmdir old_saves # Supprimer un répertoire distant vide

get rapatrie un fichier du serveur vers votre poste. Le chemin distant peut être absolu ou relatif au répertoire courant affiché par pwd, et un second argument optionnel fixe la destination locale. Sans ce second argument, le fichier atterrit dans le répertoire local courant, celui que renvoie lpwd : c'est la source d'erreur la plus fréquente quand on croit avoir perdu un téléchargement.

sftp> get /var/log/nginx/access.log

Ce fichier est téléchargé dans le répertoire local courant (visible avec lpwd).

Le répertoire local de destination doit déjà exister : sftp ne le crée pas et répond open local "/tmp/nexiste/pas/x.log": No such file or directory, avec un code de sortie 1 en mode batch.

sftp> get /var/log/nginx/access.log ~/logs/nginx-access-2026-04-09.log

Le motif est développé sur le répertoire distant : le client sftp liste le serveur et récupère chaque fichier qui correspond, votre shell local n'intervient pas. L'étoile récupère donc bien tous les journaux tournés du répertoire distant.

sftp> get /var/log/nginx/access.log.*

L'option -r parcourt l'arborescence distante et crée le dernier niveau du chemin local s'il manque, à condition que son parent existe (sinon mkdir /tmp/nexiste2/www: No such file or directory). Elle ne suit pas les liens symboliques : chacun est sauté avec download "/srv/www/lien.html": not a regular file, et la commande se termine malgré tout avec le code 0. Un /var/www/html truffé de raccourcis arrive donc incomplet sans qu'un script le remarque.

sftp> get -r /var/www/html/ ~/backup/html/

Sur une archive de plusieurs gigaoctets coupée par une rupture de VPN, relancer get repartirait de zéro.

sftp> reget /var/backup/dump-complet.tar.gz

reget reprend là où le transfert s'est arrêté au lieu de recommencer depuis zéro.


put est le miroir de get : il envoie un fichier de votre poste vers le serveur. Les droits d'écriture s'appliquent au compte avec lequel vous vous êtes connecté ; envoyer dans /etc/app/ suppose donc que bob puisse y écrire, car une session SFTP n'offre aucun équivalent de sudo. Le refus s'affiche sous la forme dest open "/etc/app/app.conf": Permission denied. Visez alors un répertoire accessible, puis déplacez le fichier via une session ssh classique.

sftp> put ~/projets/app.conf /etc/app/app.conf

Ici le motif est développé côté local par le client sftp lui-même, dans le répertoire fixé par lcd : aucun shell n'intervient, ce qui explique que la même ligne fonctionne aussi dans un fichier batch.

sftp> put *.conf /etc/app/

Le dernier niveau du chemin distant est créé s'il manque, mais son répertoire parent doit exister. Dans le cas contraire, sftp refuse avec deux lignes, realpath /srv/x/y/z: No such file puis upload "/srv/x/y/z": path canonicalization failed : créez d'abord les niveaux manquants avec mkdir depuis la session.

sftp> put -r ~/dev/mon-projet/ /var/www/html/mon-projet/

reput fait pour l'envoi ce que reget fait pour la réception : il complète le fichier distant partiel au lieu de l'écraser.

sftp> reput ~/backup/dump-complet.tar.gz /backup/

Une session SFTP ne se limite pas au transfert : elle expose un sous-ensemble des opérations de fichiers du serveur, ce qui évite d'ouvrir une seconde connexion ssh pour un simple renommage. Deux détails à connaître : chown attend un identifiant numérique, pas un nom de compte (chown bob fichier répond You must supply a numeric argument to the chown command.), et df n'est disponible que si le serveur implémente l'extension statvfs@openssh.com (c'est le cas d'OpenSSH, pas de tous les serveurs SFTP).

sftp> rename ancien.conf nouveau.conf # Renommer côté distant
sftp> rm /tmp/fichier-inutile.log # Supprimer côté distant
sftp> chmod 640 /etc/app/app.conf # Changer les permissions
sftp> chown 1000 /home/bob/fichier # Changer le propriétaire
sftp> df -h # Espace disque du serveur distant
sftp> exit # Quitter la session (ou Ctrl+D)

Pour les scripts, sftp accepte un fichier de commandes via -b : chaque ligne est exécutée comme si vous l'aviez tapée au prompt. Ce mode interrompt la session dès qu'une commande échoue et renvoie le code de sortie 1, ce qui est exactement le comportement attendu d'un script de sauvegarde : un rm sur un fichier absent affiche remote delete ...: No such file or directory et les lignes suivantes ne s'exécutent pas. Pour tolérer un échec précis, préfixez la ligne concernée d'un tiret (-rm ancien.tar.gz) : le message reste affiché, mais la session continue. Le fichier de commandes n'accepte aucun mot de passe : l'authentification doit être non interactive.

/home/bob/backup-sftp.txt
lcd /var/backup
cd /archives/linux-srv
put config-2026-04-09.tar.gz
put db-dump-2026-04-09.sql.gz
exit
Fenêtre de terminal
sftp -b /home/bob/backup-sftp.txt bob@serveur-backup.example.com

sftp lit le même fichier ~/.ssh/config que ssh et scp. Un alias qui y regroupe l'hôte, le compte, le port et la clé vous dispense donc de répéter -P et -i à chaque connexion, et vous garantit que le script de sauvegarde et la session manuelle utilisent strictement les mêmes paramètres.

~/.ssh/config
Host backup-srv
HostName serveur-backup.example.com
User bob
Port 2222
IdentityFile ~/.ssh/id_rsa_backup
Fenêtre de terminal
sftp backup-srv

La quasi-totalité des pannes SFTP sont en réalité des pannes SSH : le protocole de transfert n'entre en jeu qu'une fois la connexion établie. Le premier réflexe consiste donc à tester ssh vers le même hôte avec les mêmes options ; si ssh passe et sftp échoue, le problème est côté sous-système sftp du serveur ou côté chemin distant.

SymptômeCause probableSolution
Connection refusedPort SSH fermé ou service arrêtéVérifier ssh bob@serveur d'abord
Permission denied (publickey)Clé non autorisée côté serveurVérifier ~/.ssh/authorized_keys sur le serveur
File "/srv/absent.log" not found.Chemin distant incorrectUtiliser ls et pwd pour vérifier l'arbo distante
dest open "...": Permission deniedLe compte connecté ne peut pas écrire làViser un répertoire accessible, déplacer ensuite avec ssh et sudo
Warning: Permanently added ... to the list of known hosts.Premier accès au serveurNormal, la clé est mémorisée dans ~/.ssh/known_hosts
upload "...": path canonicalization failedParent du répertoire cible absent (put -r)Créer d'abord les niveaux manquants avec mkdir côté SFTP
download "...": not a regular fileLien symbolique sauté par get -rRécupérer la cible du lien à part, ou passer à rsync
Transfert lent sur un lien lointainLatence élevéeAugmenter les requêtes simultanées avec sftp -R 128 (64 par défaut), ou passer à rsync

  • sftp est le mode interactif du transfert via SSH, naviguer + transférer en session, contrairement à scp qui agit one-shot.
  • Le prompt sftp> offre les commandes ls/lls, cd/lcd, get/put, reget/reput, mkdir, rm, chmod.
  • -P majuscule pour le port SSH (même convention que scp).
  • reget et reput permettent de reprendre un transfert interrompu.
  • get -r saute les liens symboliques en terminant quand même avec le code 0 : vérifiez la copie.
  • Pour les scripts, utilisez sftp -b fichier-batch.txt et une authentification par clé.
  • Pour les backups récurrents volumineux, rsync reste plus efficace (delta, bande passante contrôlée).

Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn