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.
| Serveur | Votre machine | Effet |
|---|---|---|
pwd | lpwd | Afficher le dossier courant |
cd /tmp | lcd dl | Changer de dossier |
ls -la | lls | Lister les fichiers |
mkdir upload | lmkdir upload | Créer un dossier |
Déplacer des fichiers
| Commande | Effet |
|---|---|
get report.pdf | Télécharger dans le dossier local |
get report.pdf copy.pdf | Télécharger sous un autre nom |
get -r site dl/site2 | Télécharger un dossier |
put report.pdf | Envoyer dans le dossier distant |
put -r site | Envoyer un dossier |
reget big.bin | Reprendre un téléchargement partiel |
reput big.bin | Reprendre un envoi partiel |
Gérer les fichiers sur le serveur
| Commande | Effet |
|---|---|
rename old.pdf new.pdf | Renommer ou déplacer |
cp report.pdf copy.pdf | Copier un fichier sur le serveur, s'il utilise OpenSSH 9.0 ou plus récent |
rm old.pdf | Supprimer un fichier |
rmdir site | Supprimer un dossier vide |
chmod 640 file | Changer les permissions |
ln -s target name | Créer un lien symbolique |
df -h | Afficher l'espace libre |
!ls | Exécuter une commande sur votre machine |
help | Lister les commandes |
bye | Quitter |
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.