Aller au contenu
Administration Linux medium

Transférer des fichiers avec SFTP

30 min de lecture

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.

C'est un objectif direct LFCS dans le domaine "Networking", "Configure the OpenSSH server and client" inclut la maîtrise de sftp comme client de transfert.

  • 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, préfixées par 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 renvoie une erreur d'ouverture de fichier.

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

C'est le serveur qui développe le motif, pas votre shell local : 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, mais ne suit pas les liens symboliques rencontrés en chemin : un /var/www/html truffé de raccourcis arrivera incomplet.

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. En cas de refus, visez 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é par votre shell local, avant même que la commande n'atteigne le serveur.

sftp> put *.conf /etc/app/

Le répertoire distant de destination doit exister ; créez-le au besoin 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, 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 un code de sortie non nul, ce qui est exactement le comportement attendu d'un script de sauvegarde. Pour tolérer un échec précis, préfixez la ligne concernée d'un tiret (-rm ancien.tar.gz). 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
Couldn't stat remote file: No such file or directoryChemin distant incorrectUtiliser ls et pwd pour vérifier l'arbo distante
Warning: Permanently added ... to known hostsPremier accès au serveurNormal, la clé est mémorisée dans ~/.ssh/known_hosts
sftp> put ne transfère pas en répertoireRépertoire cible absentCréer d'abord avec mkdir côté SFTP
Transfert très lentChiffrement par défautEssayer sftp -o Ciphers=aes128-ctr bob@host pour accélérer en LAN

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

  • 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.
  • 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).

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn