Linux / Befehl sftp: Dateien sicher über SSH übertragen
sftp ist ein Programm, das Dateien überträgt und Remote-Dateien über eine SSH (Secure Shell)-Verbindung verwaltet. Das grundlegende Verbindungsformat ist sftp user@host, und es kann die Überprüfung von SSH-Hostschlüsseln sowie die Authentifizierung mit öffentlichen Schlüsseln wie gewohnt verwenden.
sftp user@example.com
SFTP ist ein Protokoll, das sich von FTP oder FTPS unterscheidet, die ähnliche Namen haben. Das SFTP-Subsystem von SSH muss auf dem Server aktiviert sein, und es verwendet normalerweise denselben TCP-Port wie SSH.
Funktionen von SFTP und Überprüfungen vor der Verbindung
sftp von OpenSSH führt Dateiübertragungen über eine verschlüsselte SSH-Verbindung durch und kann SSH-Funktionen wie die Authentifizierung mit öffentlichen Schlüsseln, SSH-Konfigurationsdateien und Jump-Hosts verwenden. Vollständige Optionen und interaktive Befehle finden Sie im offiziellen OpenSSH sftp-Handbuch.
- Serveradresse und SSH-Port
- Benutzerkonto zum Anmelden
- Passwort oder SSH-Privatschlüssel
- Vertrauenswürdiger Pfad zur Überprüfung des Server-Hostschlüsselfingerabdrucks
- Lese- und Schreibberechtigungen für das Remote-Verzeichnis
Vergleichen Sie den beim ersten Verbinden angezeigten Host-Schlüssel-Fingerabdruck mit dem vom Serveradministrator oder einer vertrauenswürdigen Verwaltungsoberfläche erhaltenen Wert. Wenn Sie ihn ohne Überprüfung akzeptieren, könnten Sie einen Man-in-the-Middle-Angriff übersehen oder sich mit dem falschen Server verbinden.
So verbinden Sie sich mit dem Server
Grundlegende Verbindung
sftp user@example.com
Nach der Verbindung erscheint die sftp>-Eingabeaufforderung, die Ihnen das Eingeben interaktiver Befehle ermöglicht. Diese Eingabeaufforderung dient nur zu Illustrationszwecken, und in den nachfolgenden Codebeispielen werden nur die Befehle selbst angezeigt.
Verwendung eines anderen SSH-Ports
sftp -P 2222 user@example.com
Die Port-Option für SFTP ist Großbuchstaben -P. Kleinbuchstaben -p ist eine andere Option, die die Beibehaltung von Änderungszeit, Zugriffszeit und Dateiberechtigungen anfordert, also verwechseln Sie sie nicht.
Spezifizierung eines privaten Schlüssels
sftp -i ~/.ssh/id_ed25519 user@example.com
Beschränken Sie die Berechtigungen für Ihre private Schlüsseldatei, damit andere Benutzer sie nicht lesen können, und legen Sie wenn möglich ein Passwort fest, um sie mit einem SSH-Agenten zu verwenden. Kopieren Sie Ihren privaten Schlüssel nicht auf Server oder gemeinsame Verzeichnisse.
Unterscheidung von lokalen und entfernten Pfaden
Im SFTP-Interaktivmodus gibt es separate Befehle, die auf dem entfernten Server und auf dem lokalen Computer ausgeführt werden.
| Befehl | Ziel | Beschreibung |
|---|---|---|
pwd |
Entfernt | Zeigt das aktuelle Verzeichnis des entfernten Servers an. |
lpwd |
Lokal | Zeigt das aktuelle Verzeichnis des Computers an, auf dem SFTP ausgeführt wird. |
cd path |
Entfernt | Ändert das entfernte Verzeichnis. |
lcd path |
Lokal | Ändert das lokale Verzeichnis. |
ls |
Entfernt | Zeigt die Liste der entfernten Dateien an. |
lls |
Lokal | Zeigt die Liste der lokalen Dateien an. |
mkdir |
Entfernt | Erstellt ein entferntes Verzeichnis. |
lmkdir |
Lokal | Erstellt ein lokales Verzeichnis. |
Es ist eine gute Gewohnheit, pwd und lpwd vor Arbeitsbeginn zu überprüfen, um das Senden von Dateien an den falschen Ort zu vermeiden.
Dateien herunterladen
Eine einzelne Datei herunterladen
get reports/daily.csv
Sie können den lokalen Speicherpfad als zweites Argument angeben.
get reports/daily.csv ./download/daily.csv
Mehrere Dateien und Verzeichnisse herunterladen
get reports/*.csv get -R reports
Platzhalter können zu entfernten Dateinamen passen. Beim rekursiven Herunterladen von Verzeichnissen folgt SFTP keinen symbolischen Links im Verzeichnisbaum, und die Unterstützungsoptionen können je nach Server- und Client-Version variieren.
Unterbrochene Downloads fortsetzen
reget archive.tar.zst
Oder Sie können teilweise Übertragungen mit get -a fortsetzen. Dies setzt voraus, dass die teilweise lokale Datei genau mit dem Anfang der entfernten Datei übereinstimmt. Wenn sich die entfernte Datei geändert hat, kann das Ergebnis beschädigt sein. Für wichtige Dateien vergleichen Sie nach der Übertragung die Prüfsummen.
Dateien hochladen
Eine einzelne Datei hochladen
put ./release.tar.zst
Sie können den entfernten Speicherpfad oder Namen als zweiten Parameter angeben.
put ./release.tar.zst uploads/release.tar.zst
Ein Verzeichnis rekursiv hochladen
put -R ./assets uploads/assets
Da bestehende Dateien überschrieben werden können, überprüfen Sie zuerst den entfernten Pfad. Wenn es sich um ein Verzeichnis handelt, auf das mehrere Benutzer gleichzeitig zugreifen, ist es sicherer, mit einem temporären Namen hochzuladen und anschließend das serverunterstützte atomare Umbenennungsverfahren zu verwenden.
Unterbrochene Uploads fortsetzen
reput ./large-image.img
put -a versucht auch, teilweise Uploads fortzusetzen. Wenn die entfernte Teildatei nicht mit dem Anfang der lokalen Datei übereinstimmt, kann eine beschädigte Datei erstellt werden, daher prüfen Sie Änderungen und verifizieren Sie den Hash nach Abschluss.
Umgang mit Pfaden, Leerzeichen und Dateinamen
Pfade mit Leerzeichen in Anführungszeichen setzen.
get "Monthly Reports/September Report.csv" put "./Release Files/app package.tar.zst" uploads/
Die interaktive Befehlsinterpretation in SFTP ist nicht genau dieselbe wie in einer normalen Shell. Bei Dateinamen, die Platzhalter oder Backslashes enthalten, überprüfen Sie zuerst den genauen Namen in der Liste, und für die Automatisierung ist es sicherer, einfache und vorhersehbare Dateinamen zu verwenden.
Verwaltung von Verbindungsinformationen mit SSH-Konfigurationsdateien
Wiederholte Optionen unter dem Host-Eintrag gruppieren
Indem Sie Aliase, Benutzer, Ports und Schlüsselpfade in ~/.ssh/config schreiben, können Sie sich kurz verbinden.
Host fileserver
HostName sftp.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
sftp fileserver
Geben Sie keine Passwörter oder Inhalte privater Schlüssel in die Konfigurationsdatei ein. Beschränken Sie die Dateiberechtigungen und überprüfen Sie die Priorität zwischen systemweiten und benutzerspezifischen Konfigurationen.
Verbindung über einen Jump-Host
sftp -J bastion.example.com user@internal.example.com
-J verwendet die ProxyJump-Funktion von SSH. Überprüfen Sie die Hostschlüssel sowohl des Jump-Hosts als auch des Zielservers separat und verwenden Sie die Agentenweiterleitung nur bei Bedarf.
Automatisches Senden im Batch-Modus
Erstellen einer Batch-Datei
Speichern Sie zum Beispiel die folgenden SFTP-Befehle in upload.sftp.
cd incoming lcd ./exports put report.csv report.tmp rename report.tmp report.csv bye
Hochladen zunächst mit einem temporären Namen und anschließendem Umbenennen kann das Risiko verringern, dass andere Prozesse eine Datei, die sich noch im Vorgang befindet, als abgeschlossen lesen. Die Atomizität hängt davon ab, ob das Umbenennen innerhalb desselben Dateisystems auf dem Server unterstützt wird.
Die Batch-Datei ausführen
sftp -b upload.sftp fileserver
Der Batch-Modus sollte nicht auf Benutzerinteraktion zur Passwortabfrage angewiesen sein. Verwenden Sie ein eingeschränktes dediziertes Konto und die Authentifizierung mit öffentlichem Schlüssel, und begrenzen Sie die Rechte des Schlüssels, die Zugriffsquellen und erlaubten Pfade gemäß der Serverrichtlinie. Legen Sie keine Passwörter in Skripten oder Befehlszeilen ab.
Fehlerbehandlung verstehen
Im Batch-Modus, wenn Befehle wie get, put oder rename fehlschlagen, stoppt der Vorgang normalerweise. Sie können Fehler ignorieren, indem Sie ein - vor den Befehl setzen, sollten dies jedoch selektiv verwenden, da der Vorgang sonst erfolgreich erscheinen kann, selbst wenn notwendige Dateien fehlen.
In der Automatisierung sollten Sie den Exit-Status des SFTP-Prozesses, die Größe der übertragenen Dateien und nach Möglichkeit Prüfsummen überprüfen und Benachrichtigungs- sowie Wiederholungsrichtlinien für den Fehlerfall festlegen.
Sicherheits- und Betriebsliste
- Host-Schlüssel: Überprüfen Sie den Fingerabdruck beim ersten Verbinden und bei Schlüsseländerungen über einen vertrauenswürdigen Kanal.
- Authentifizierung: Für die Automatisierung verwenden Sie einen Public Key mit eingeschränktem Umfang und ein dediziertes Konto anstelle von Passwörtern.
- Privater Schlüssel: Minimieren Sie die Leseberechtigungen und laden Sie ihn nicht in Speicher, Backup-Ordner oder Server hoch.
- Pfadberechtigungen: Beschränken Sie den Zugriff, sodass das Upload-Konto nur die notwendigen Verzeichnisse erreichen kann.
- Überschreiben: Überprüfen Sie den Zielpfad und vorhandene Dateien und verwenden Sie temporäre Namen sowie eine Versionsaufbewahrungsrichtlinie.
- Integrität: Generieren Sie für wichtige Übertragungen vertrauenswürdige Prüfsummen auf beiden Seiten und vergleichen Sie diese.
- Protokoll: Erfolge und Misserfolge von Übertragungen und deren Ziele werden aufgezeichnet, Passwörter, private Schlüssel und Inhalte sensibler Dateien werden jedoch nicht gespeichert.
Vergleich von SFTP, SCP, rsync
| Werkzeuge | Geeignete Situationen | Funktionen |
|---|---|---|
sftp |
Interaktive Dateiverwaltung und standardisierter Transfer | Bietet Remote-Auflistung, Verzeichnisnavigation, Wiederaufnahme und Batch-Befehle. |
scp |
Einfaches Kopieren von Dateien | Einfach mit einem einzigen Befehl zu kopieren, aber interaktive Remote-Verwaltungsfunktionen sind eingeschränkt. |
rsync |
Wiederholte Synchronisierung und große Verzeichnisse | Bietet die Übertragung geänderter Dateien, Ausschlussregeln und Löschsynchronisierung, erfordert jedoch auch eine unterstützende Umgebung auf dem Server. |
Die alleinige Verwendung von SSH macht Kontoberechtigungen und Bereitstellungsverfahren nicht automatisch sicher. Wählen Sie basierend auf dem Zweck der Übertragung und der Methode zur Fehlerbehebung.
Häufig gestellte Fragen
Ist SFTP FTP mit TLS angewendet?
Nein. SFTP ist das SSH-Dateiübertragungsprotokoll und arbeitet über eine SSH-Verbindung. FTPS ist eine separate Methode, die TLS auf FTP anwendet, mit anderen Servereinstellungen und Portstrukturen.
Warum tritt ein Fehler "Verbindung verweigert" auf?
Die Adresse oder der Port könnte falsch sein, der SSH-Dienst könnte nicht lauschen oder eine Firewall könnte die Verbindung ablehnen. Überprüfen Sie die Serveradresse, den Port -P, den Status des SSH-Dienstes und die Netzwerkrichtlinien.
Was soll ich tun, wenn "Permission denied" erscheint?
Sie müssen unterscheiden, ob die Authentifizierung selbst fehlgeschlagen ist oder ob nach dem Login unzureichende Datei-Berechtigungen vorliegen. Überprüfen Sie die Verbindungsdiagnoseinformationen mit sftp -v, aber teilen Sie Benutzernamen, Pfade und Serverdetails nicht in öffentlichen Protokollen.
Wie überprüfe ich, dass der Upload abgeschlossen ist?
Überprüfen Sie den Exit-Status und die Größe der Remote-Dateien und berechnen und vergleichen Sie Prüfsummen wie SHA-256 für wichtige Dateien sowohl auf lokalen als auch auf Remote-Systemen. Wenn der SFTP-Server ein eingeschränktes Konto verwendet, das keine beliebige Befehlausführung zulässt, kann eine separate Verifizierungs-API oder ein serverseitiges Verarbeitungsverfahren erforderlich sein.
Zusammenfassung
Nach der Verbindung mit sftp user@host verwenden Sie get zum Herunterladen und put zum Hochladen. Die Unterscheidung von pwd und lpwd sowie von cd und lcd kann helfen, Fehler bei Remote- und lokalen Pfaden zu reduzieren.
In der operativen Automatisierung sind Schlüsselpunkte die Authentifizierung mit öffentlichem Schlüssel, die Überprüfung des Host-Schlüssels sowie die Prüfung des Batch-Abschlussstatus und der Dateiintegrität. Speichern Sie keine Passwörter in Skripten; begrenzen Sie den Übertragungsbereich mit einem dedizierten Konto und minimalen Rechten.




