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.
| Server | Ihr Rechner | Was er tut |
|---|---|---|
pwd | lpwd | Den aktuellen Ordner anzeigen |
cd /tmp | lcd dl | Den Ordner wechseln |
ls -la | lls | Dateien auflisten |
mkdir upload | lmkdir upload | Einen Ordner anlegen |
Dateien übertragen
| Befehl | Was er tut |
|---|---|
get report.pdf | In den lokalen Ordner herunterladen |
get report.pdf copy.pdf | Unter anderem Namen herunterladen |
get -r site dl/site2 | Einen Ordner herunterladen |
put report.pdf | In den Remote-Ordner hochladen |
put -r site | Einen Ordner hochladen |
reget big.bin | Einen angefangenen Download fortsetzen |
reput big.bin | Einen angefangenen Upload fortsetzen |
Dateien auf dem Server verwalten
| Befehl | Was er tut |
|---|---|
rename old.pdf new.pdf | Umbenennen oder verschieben |
cp report.pdf copy.pdf | Eine Datei auf dem Server kopieren, wenn dort OpenSSH 9.0 oder neuer läuft |
rm old.pdf | Eine Datei löschen |
rmdir site | Einen leeren Ordner löschen |
chmod 640 file | Rechte ändern |
ln -s target name | Einen symbolischen Link anlegen |
df -h | Freien Speicherplatz anzeigen |
!ls | Einen Befehl auf Ihrem Rechner ausführen |
help | Befehle auflisten |
bye | Beenden |
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.