Commandes sftp : get, put, ls, lcd et mode batch

Lancez sftp user@server pour ouvrir une invite. Utilisez get file pour télécharger, put file pour envoyer, ls et cd sur le serveur, lls et lcd sur votre machine, et bye pour quitter. Pour les scripts, listez les commandes dans un fichier et lancez sftp -b commands.txt user@server, ce qui exige une connexion par clé, car le mode batch ne peut pas demander de mot de passe.

Mis à jour le . sftp d'OpenSSH 10.3 sur macOS vers OpenSSH 10.0 sur Debian 13 dans un conteneur jetable. La commande cp et le refus de rm -r ont été testés sur OpenSSH 10.0 dans Debian 13.

Se connecter

sftp user@server
sftp -P 2222 user@server
sftp user@server:/var/log/

L'option de port est un -P majuscule. La dernière forme ouvre l'invite dans ce dossier.

Commandes à l'invite

Les commandes qui commencent par l agissent sur votre machine. Les autres agissent sur le serveur.

ServeurVotre machineEffet
pwdlpwdAfficher le dossier courant
cd /tmplcd dlChanger de dossier
ls -lallsLister les fichiers
mkdir uploadlmkdir uploadCréer un dossier

Déplacer des fichiers

CommandeEffet
get report.pdfTélécharger dans le dossier local
get report.pdf copy.pdfTélécharger sous un autre nom
get -r site dl/site2Télécharger un dossier
put report.pdfEnvoyer dans le dossier distant
put -r siteEnvoyer un dossier
reget big.binReprendre un téléchargement partiel
reput big.binReprendre un envoi partiel

Gérer les fichiers sur le serveur

CommandeEffet
rename old.pdf new.pdfRenommer ou déplacer
cp report.pdf copy.pdfCopier un fichier sur le serveur, s'il utilise OpenSSH 9.0 ou plus récent
rm old.pdfSupprimer un fichier
rmdir siteSupprimer un dossier vide
chmod 640 fileChanger les permissions
ln -s target nameCréer un lien symbolique
df -hAfficher l'espace libre
!lsExécuter une commande sur votre machine
helpLister les commandes
byeQuitter

Il n'existe pas de suppression récursive : rm -r s'arrête avec rm: Invalid flag -r. rm supprime un seul fichier et rmdir ne supprime qu'un dossier vide : un dossier plein doit donc être vidé d'abord.

Un fichier sans passer par l'invite

sftp user@server:/etc/hostname local-copy

Pour une copie ponctuelle, les exemples de scp sont souvent plus courts. La comparaison complète est dans scp, SFTP ou rsync.

Mode batch pour les scripts

Placez les commandes dans un fichier :

cd /tmp
put report.pdf
bye

Puis lancez-le :

sftp -b commands.txt user@server

Ou lisez l'entrée standard avec - :

printf 'put report.pdf /tmp/report.pdf\nbye\n' | sftp -b - user@server

Une connexion par clé est nécessaire

-b désactive les invites de mot de passe. Avec un compte qui n'accepte que le mot de passe, il s'est arrêté dans notre essai avec :

user@server: Permission denied (publickey,password).
Connection closed

Configurez d'abord une clé. Voir comment générer une clé ed25519.

Il s'arrête à la première erreur

C'est tout l'intérêt de -b. Une commande qui échoue termine l'exécution avec le code de sortie 1, ce qui permet à votre script de réagir :

$ sftp -b b2.txt user@server
sftp> cd /nosuch
stat remote: No such file or directory
$ echo $?
1

Pour tolérer un échec sur une ligne, faites-la commencer par -. Pour masquer l'écho d'une ligne, faites-la commencer par @ :

-cd /nosuch
@pwd

Avec la ligne en -, l'exécution a continué dans notre essai et s'est terminée avec le code de sortie 0.

Passer des commandes par un tube sans -b

sftp user@server < commands.txt ne s'arrête pas sur les erreurs. Dans notre essai, il a continué après un cd raté et s'est terminé avec le code de sortie 0. Il peut aussi demander un mot de passe depuis votre terminal. Réservez-le à un travail manuel rapide. Utilisez -b dans les scripts.

Questions

Comment télécharger un dossier avec sftp ?

Avec get -r, par exemple get -r site dl/site. Sans -r, sftp ne télécharge pas un dossier.

Comment changer de dossier local dans sftp ?

Avec lcd, par exemple lcd ~/Downloads. Les commandes qui commencent par l, comme lls et lpwd, agissent sur votre machine, les autres sur le serveur.

Pourquoi sftp -b échoue-t-il avec Permission denied ?

Le mode batch ne peut pas demander de mot de passe, il faut donc une connexion par clé. Configurez une clé SSH pour le compte, puis relancez sftp -b.

Sources

Autres guides : SFTP et transfert de fichiers

Tous les guides