Früher oder später müssen Sie Dateien einer Website auf den Server hochladen, eine Sicherungskopie herunterladen oder eine Konfigurationsdatei in einem bequemen Editor auf Ihrem eigenen Computer bearbeiten. Dafür gibt es SFTP, ein Protokoll zur Dateiübertragung, das über SSH läuft. Wenn Sie sich bereits per SSH mit dem Server verbinden, ist SFTP schon vorhanden, zusätzlich installieren müssen Sie nichts. In diesem Artikel klären wir, wie SFTP funktioniert, übertragen Dateien über das Terminal und über FileZilla und legen anschließend einen eigenen Benutzer an, der nur mit den Dateien in einem Ordner arbeiten kann und sich nicht per SSH am Server anmelden darf. Alle Beispiele haben wir auf einem Testserver mit Debian 12 geprüft.
Wie SFTP funktioniert
Trotz des ähnlichen Namens hat SFTP nichts mit dem alten Protokoll FTP zu tun. Es ist ein Teil von SSH. Wenn Sie sich per SFTP verbinden, öffnet der Client eine gewöhnliche SSH-Verbindung auf Port 22, durchläuft dieselbe Prüfung von Passwort oder Schlüssel und startet dann auf dem Server statt der Kommandozeile ein spezielles Programm für die Arbeit mit Dateien. In der SSH-Konfiguration auf unserem Server mit Debian 12 ist es standardmäßig mit der Zeile Subsystem sftp /usr/lib/openssh/sftp-server eingebunden.
Daraus ergeben sich drei praktische Eigenschaften. Erstens wird alles, was übertragen wird, genauso verschlüsselt wie eine SSH-Sitzung, deshalb gehen weder Passwort noch Dateien im Klartext durch das Netz. Zweitens müssen Sie in der Firewall keine neuen Ports öffnen und keinen separaten FTP-Server installieren. Drittens funktionieren für die Anmeldung dieselben Benutzer und Schlüssel wie für SSH.
Das hat auch eine Kehrseite. Ein gewöhnlicher Benutzer, der sich per SFTP verbinden kann, kann sich auch per SSH anmelden und alle Dateien sehen, die er lesen darf. Wenn jemand nur Dateien hochladen soll, zum Beispiel ein Entwickler Ihrer Website, legen Sie für ihn besser einen Benutzer an, der nur SFTP und nur einen Ordner hat. Das geht mit den integrierten Mitteln von SSH, wir zeigen es in Schritt 3.
Was Sie brauchen
- Einen Server mit Debian 12 oder Ubuntu 24.04 und SSH-Zugang. Wie Sie sich verbinden, steht im Artikel über Termius.
- Das Programm
sftpauf Ihrem Computer. Unter macOS und Linux ist es bereits vorhanden. Unter Windows 10 und 11 gehört es zur Komponente OpenSSH Client. Wenn der Befehl nicht gefunden wird, fügen Sie diese Komponente in den zusätzlichen Windows-Komponenten unter Optional Features hinzu.
Schritt 1. Verbinden Sie sich per SFTP aus dem Terminal
Öffnen Sie auf Ihrem Computer ein Terminal und verbinden Sie sich mit dem Server. Geben Sie statt IP-des-Servers die Adresse Ihres VPS ein.
sftp root@IP-des-ServersDas Programm fragt wie bei einer gewöhnlichen SSH-Verbindung nach dem Passwort und bittet bei der ersten Verbindung darum, den Schlüssel des Servers zu bestätigen. Wenn der Server neu installiert wurde und eine Warnung über einen geänderten Schlüssel erscheint, hilft der Artikel über REMOTE HOST IDENTIFICATION HAS CHANGED. Nach der Anmeldung erscheint die Eingabeaufforderung sftp>.
Schritt 2. Übertragen Sie Dateien
In einer SFTP-Sitzung haben Sie zwei aktuelle Verzeichnisse, eines auf dem Server und eines auf Ihrem Computer. Befehle für den Server schreiben Sie wie gewohnt, Befehle für Ihren Computer mit einem l am Anfang, vom englischen Wort local.
| Befehl | Was er macht |
|---|---|
pwd und lpwd | Den aktuellen Ordner auf dem Server und auf dem Computer anzeigen |
ls und lls | Liste der Dateien auf dem Server und auf dem Computer |
cd und lcd | In einen Ordner auf dem Server und auf dem Computer wechseln |
put Datei | Eine Datei vom Computer auf den Server hochladen |
get Datei | Eine Datei vom Server auf den Computer herunterladen |
put -R Ordner und get -R Ordner | Einen ganzen Ordner hochladen oder herunterladen |
reput Datei und reget Datei | Einen unterbrochenen Upload oder Download fortsetzen |
mkdir, rm, rename | Einen Ordner erstellen, eine Datei löschen, umbenennen |
bye | Die Sitzung beenden |
Unten sehen Sie eine echte Sitzung von unserem Computer. Wir haben auf dem Server einen Ordner erstellt, eine Datei hineingeladen, geprüft, dass sie vorhanden ist, und sie unter einem anderen Namen wieder heruntergeladen.
mkdir site-backup
cd site-backup
put report.txt
ls -l
get report.txt report-copy.txt
bye
Die Datei wurde auf den Server hochgeladen und wieder heruntergeladen
Der Befehl put nimmt die Datei aus dem aktuellen Ordner auf dem Computer, und get speichert die Datei ebenfalls dort. Deshalb wechseln Sie vor der Arbeit am besten mit lcd in den gewünschten Ordner auf Ihrem Computer.
So verbinden Sie sich über FileZilla
Wenn Sie Dateien lieber mit der Maus verschieben, nutzen Sie FileZilla, ein kostenloses Programm für Windows, macOS und Linux. Laut der offiziellen Anleitung von FileZilla läuft die Verbindung per SFTP so ab.
- Geben Sie in der Schnellverbindungsleiste oben im Fenster im Adressfeld die Serveradresse mit dem Präfix
sftp://ein, zum Beispielsftp://203.0.113.10. - Geben Sie Benutzername und Passwort ein.
- Den Port müssen Sie nicht angeben, für SFTP wird standardmäßig 22 verwendet.
- Klicken Sie auf die Schaltfläche für die Schnellverbindung Quickconnect oder drücken Sie Enter.
Nach der Verbindung sehen Sie links die Dateien Ihres Computers und rechts die Dateien des Servers. Zwischen beiden übertragen Sie Dateien per Drag-and-drop.
Vergessen Sie das Präfix sftp:// nicht
Ohne das Präfix verbindet sich FileZilla per gewöhnlichem FTP auf Port 21. Auf einem VPS, auf dem es keinen FTP-Server gibt, funktioniert eine solche Verbindung nicht.
Schritt 3. Legen Sie einen Benutzer nur für SFTP an
Jetzt legen wir den Benutzer sftpuser an, der nur in einem Ordner mit Dateien arbeiten kann und sich nicht per SSH anmelden darf. Dafür kann SSH einen Benutzer mithilfe von chroot in einem Verzeichnis einsperren. Für einen solchen Benutzer wird der angegebene Ordner zum Stammverzeichnis des Dateisystems, und höher als dieses kann er nicht gelangen.
Für chroot gilt eine strenge Regel. Der Ordner selbst, in dem der Benutzer eingesperrt wird, und alle Ordner darüber müssen root gehören, und außer root darf niemand Schreibrechte darauf haben. Deshalb legt der Benutzer seine Dateien in einem Unterordner files ab, der ihm bereits gehört.
Erstellen Sie eine Gruppe und einen Benutzer ohne Zugang zur Kommandozeile.
bashgroupadd sftponly useradd -m -d /home/sftpuser -s /usr/sbin/nologin -G sftponly sftpuser passwd sftpuserDer Befehl
passwdfragt zweimal nach dem Passwort für den neuen Benutzer. Mit diesem Passwort verbindet er sich per SFTP.Erstellen Sie den Ordner für chroot und den Ordner für die Dateien mit den richtigen Besitzern.
bashmkdir -p /srv/sftp/sftpuser/files chown root:root /srv/sftp /srv/sftp/sftpuser chmod 755 /srv/sftp /srv/sftp/sftpuser chown sftpuser:sftpuser /srv/sftp/sftpuser/filesLegen Sie eine Sicherungskopie der SSH-Einstellungen an und öffnen Sie sie.
bashcp /etc/ssh/sshd_config /root/sshd_config.bak nano /etc/ssh/sshd_configFügen Sie ganz am Ende der Datei den folgenden Block ein und speichern Sie die Datei.
%uersetzt SSH durch den Benutzernamen, deshalb passt ein Block für alle künftigen Benutzer der Gruppesftponly.bashMatch Group sftponly ChrootDirectory /srv/sftp/%u ForceCommand internal-sftp -d /files AllowTcpForwarding no X11Forwarding noPrüfen Sie die Einstellungen und übernehmen Sie sie. Wenn
sshd -teinen Fehler ausgibt, laden Sie SSH nicht neu, sondern korrigieren Sie die Datei.bashsshd -t && systemctl reload ssh
Schließen Sie die aktuelle Verbindung nicht
Solange Sie die SSH-Einstellungen ändern, lassen Sie das Fenster, in dem Sie arbeiten, geöffnet. Prüfen Sie zuerst in einem neuen Fenster, dass die Anmeldung am Server weiterhin funktioniert, und schließen Sie erst dann das alte. So haben wir es gemacht, und die Anmeldung für root funktionierte nach der Änderung weiter.
Verbinden Sie sich mit dem neuen Benutzer über den Befehl sftp sftpuser@IP-des-Servers. Er landet sofort im Ordner /files, kann dort Dateien hochladen, aber nicht höher wechseln. Im Stammverzeichnis sieht er nur den Ordner files, den Ordner /etc des Servers gibt es für ihn schlicht nicht.

Der Benutzer ist in seinem Ordner eingesperrt
Wenn derselbe Benutzer versucht, sich per SSH anzumelden, antwortet der Server mit This service allows sftp connections only. und beendet die Verbindung.
Um einen weiteren solchen Benutzer hinzuzufügen, wiederholen Sie die Schritte 1 und 2 mit seinem Namen. Den Block in sshd_config müssen Sie nicht ändern.
Häufige Fragen
fatal: bad ownership or modes for chroot directory
Der chroot-Ordner oder einer der Ordner darüber gehört nicht root oder ist für jemand anderen beschreibbar. Der Client sieht dabei nur Connection closed, den eigentlichen Grund finden Sie im Protokoll mit dem Befehl journalctl -u ssh -n 20. Wir haben diesen Fehler erhalten, als wir den Benutzer selbst zum Besitzer von /srv/sftp/sftpuser gemacht hatten. Stellen Sie den Besitzer mit den Befehlen chown root:root /srv/sftp/sftpuser und chmod 755 /srv/sftp/sftpuser wieder her.
dest open "/report.txt": Permission denied
Der Benutzer versucht, eine Datei in das Stammverzeichnis seines chroot-Ordners zu schreiben, und dieses gehört root. Das ist so gewollt. Legen Sie Dateien im Unterordner files ab, dorthin gelangt der Benutzer direkt nach der Anmeldung.
This service allows sftp connections only.
Das ist kein Fehler. Ein Benutzer aus der Gruppe sftponly kann nur per SFTP arbeiten, die Anmeldung an der Kommandozeile per SSH ist ihm verboten.
Permission denied (publickey,password)
Der Server hat weder den Schlüssel noch das Passwort akzeptiert. Wir haben diesen Fehler erhalten, als wir uns mit dem Benutzer sftpuser ohne Schlüssel und ohne Passwort verbunden haben. Prüfen Sie Benutzernamen und Passwort, und wenn noch kein Passwort gesetzt ist, legen Sie es mit dem Befehl passwd sftpuser fest. Wenn Sie sich per Schlüssel anmelden, muss der öffentliche Schlüssel in /home/sftpuser/.ssh/authorized_keys liegen, also im Home-Verzeichnis und nicht im chroot-Ordner. Mehr zu Schlüsseln steht im Artikel über SSH-Schlüssel.
Unsere Ressourcen
Telegram-Kanal: https://t.me/f3cloud_news
Hosting-Website: https://f3cloud.com