sftp-Befehle: get, put, ls, lcd und Batch-Modus

Führen Sie sftp user@server aus, um einen Prompt zu öffnen. Mit get file laden Sie herunter, mit put file hoch, mit ls und cd arbeiten Sie auf dem Server, mit lls und lcd auf Ihrem Rechner, und bye beendet die Sitzung. Für Skripte schreiben Sie die Befehle in eine Datei und führen sftp -b commands.txt user@server aus. Das braucht eine Schlüsselanmeldung, weil der Batch-Modus nicht nach einem Passwort fragen kann.

Lieber Ordner durchklicken als ls und cd tippen? Jeder in Wardterm gespeicherte Server hat seine eigene Dateiansicht. Zeigen

Aktualisiert am . sftp aus OpenSSH 10.3 unter macOS zu OpenSSH 10.0 unter Debian 13 in einem Wegwerf-Container. Der Befehl cp und das abgelehnte rm -r wurden mit OpenSSH 10.0 unter Debian 13 ausgeführt.

Verbinden

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

Die Port-Option ist ein großes -P. Die letzte Form öffnet den Prompt in diesem Ordner.

Befehle am Prompt

Befehle, die mit l beginnen, wirken auf Ihren Rechner. Die übrigen wirken auf den Server.

ServerIhr RechnerWas er tut
pwdlpwdDen aktuellen Ordner anzeigen
cd /tmplcd dlDen Ordner wechseln
ls -lallsDateien auflisten
mkdir uploadlmkdir uploadEinen Ordner anlegen

Dateien übertragen

BefehlWas er tut
get report.pdfIn den lokalen Ordner herunterladen
get report.pdf copy.pdfUnter anderem Namen herunterladen
get -r site dl/site2Einen Ordner herunterladen
put report.pdfIn den Remote-Ordner hochladen
put -r siteEinen Ordner hochladen
reget big.binEinen angefangenen Download fortsetzen
reput big.binEinen angefangenen Upload fortsetzen

Dateien auf dem Server verwalten

BefehlWas er tut
rename old.pdf new.pdfUmbenennen oder verschieben
cp report.pdf copy.pdfEine Datei auf dem Server kopieren, wenn dort OpenSSH 9.0 oder neuer läuft
rm old.pdfEine Datei löschen
rmdir siteEinen leeren Ordner löschen
chmod 640 fileRechte ändern
ln -s target nameEinen symbolischen Link anlegen
df -hFreien Speicherplatz anzeigen
!lsEinen Befehl auf Ihrem Rechner ausführen
helpBefehle auflisten
byeBeenden

Es gibt kein rekursives Löschen: rm -r bricht mit rm: Invalid flag -r ab. rm entfernt eine Datei und rmdir nur einen leeren Ordner, ein voller Ordner muss also zuerst geleert werden.

Eine Datei ohne Prompt

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

Für schnelle einzelne Kopien sind die scp-Beispiele oft kürzer. Den vollständigen Vergleich finden Sie unter scp, SFTP oder rsync.

Batch-Modus für Skripte

Schreiben Sie die Befehle in eine Datei:

cd /tmp
put report.pdf
bye

Führen Sie sie dann aus:

sftp -b commands.txt user@server

Oder lesen Sie mit - von der Standardeingabe:

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

Es braucht eine Schlüsselanmeldung

-b schaltet Passwortabfragen ab. Bei einem Konto nur mit Passwort stoppte es in unserem Test mit:

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

Richten Sie zuerst einen Schlüssel ein. Siehe ed25519-Schlüssel erzeugen.

Es stoppt beim ersten Fehler

Das ist der Sinn von -b. Ein fehlgeschlagener Befehl beendet den Lauf mit Exit-Code 1, sodass Ihr Skript reagieren kann:

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

Um bei einer Zeile einen Fehler zu erlauben, beginnen Sie sie mit -. Um das Echo einer Zeile zu verbergen, beginnen Sie sie mit @:

-cd /nosuch
@pwd

Mit der --Zeile lief der Durchlauf in unserem Test weiter und endete mit Exit-Code 0.

Befehle ohne -b per Pipe übergeben

sftp user@server < commands.txt hält bei Fehlern nicht an. In unserem Test lief es nach einem fehlgeschlagenen cd weiter und endete mit Exit-Code 0. Es kann außerdem von Ihrem Terminal aus nach einem Passwort fragen. Nutzen Sie es für eine schnelle manuelle Aufgabe. In Skripten verwenden Sie -b.

Fragen

Wie lade ich mit sftp einen Ordner herunter?

Mit get -r, zum Beispiel get -r site dl/site. Ohne -r lädt sftp keinen Ordner herunter.

Wie wechsle ich in sftp den lokalen Ordner?

Mit lcd, zum Beispiel lcd ~/Downloads. Befehle, die mit l beginnen, wie lls und lpwd, wirken auf Ihrem Rechner, die anderen auf dem Server.

Warum scheitert sftp -b mit Permission denied?

Der Batch-Modus kann kein Passwort abfragen und braucht daher eine Anmeldung per Schlüssel. Richten Sie für das Konto einen SSH-Schlüssel ein und starten Sie sftp -b erneut.

Quellen

Mehr zu SFTP und Dateiübertragung

Alle Anleitungen