Einführung
FTP, das File Transfer Protocol, war eine beliebte, unverschlüsselte Methode zum Übertragen von Dateien zwischen zwei entfernten Systemen. Seit 2022 wurde es von den meisten modernen Softwareanwendungen aufgrund mangelnder Sicherheit veraltet und kann hauptsächlich nur noch in Legacy-Anwendungen verwendet werden.
SFTP, was für Sicheres File Transfer Protocol steht, ist ein separates Protokoll, das in SSH integriert ist und FTP-Befehle über eine sichere Verbindung implementieren kann. Typischerweise kann es als direkter Ersatz in allen Kontexten fungieren, in denen ein FTP-Server noch benötigt wird.
In fast allen Fällen ist SFTP FTP aufgrund seiner zugrunde liegenden Sicherheitsfunktionen und seiner Fähigkeit, sich auf einer SSH-Verbindung aufzusetzen, vorzuziehen. FTP ist ein unsicheres Protokoll, das nur in begrenzten Fällen oder in Netzwerken verwendet werden sollte, denen Sie vertrauen.
Obwohl SFTP in viele grafische Tools integriert ist, wird in diesem Leitfaden gezeigt, wie es über seine interaktive Befehlszeilenschnittstelle verwendet wird.
So verbinden Sie sich mit SFTP
Standardmäßig verwendet SFTP das SSH-Protokoll zur Authentifizierung und zum Aufbau einer sicheren Verbindung. Aufgrund dessen stehen dieselben Authentifizierungsmethoden zur Verfügung, die in SSH vorhanden sind.
Obwohl Sie sich standardmäßig mit Passwörtern authentifizieren können, empfehlen wir Ihnen, SSH-Schlüssel zu erstellen und Ihren öffentlichen Schlüssel auf jedes System zu übertragen, auf das Sie zugreifen müssen. Dies ist viel sicherer und kann Ihnen langfristig Zeit sparen.
Bitte sehen Sie sich diese Anleitung zum Einrichten von SSH-Schlüsseln an, um auf Ihren Server zuzugreifen, wenn Sie dies noch nicht getan haben.
Wenn Sie eine Verbindung mit der Maschine über SSH herstellen können, haben Sie alle notwendigen Voraussetzungen erfüllt, um SFTP zum Verwalten von Dateien zu verwenden. Testen Sie den SSH-Zugriff mit dem folgenden Befehl:
Wenn das funktioniert, verlassen Sie die Verbindung, indem Sie Folgendes eingeben:
Jetzt können wir eine SFTP-Sitzung aufbauen, indem wir den folgenden Befehl eingeben:
Sie werden sich mit dem entfernten System verbinden und Ihre Eingabeaufforderung wird zu einer SFTP-Eingabeaufforderung.
Wenn Sie an einem benutzerdefinierten SSH-Port arbeiten (nicht am Standardport 22), können Sie eine SFTP-Sitzung wie folgt öffnen:
Dies wird Sie mit dem entfernten System über den von Ihnen angegebenen Port verbinden.
Hilfe bei SFTP erhalten
Der nützlichste Befehl, den Sie zuerst lernen sollten, ist der Hilfebefe
hl. Dies gibt Ihnen Zugriff auf eine Zusammenfassung der anderen SFTP-Befehle. Sie können ihn aufrufen, indem Sie eine der folgenden Optionen in die Eingabeaufforderung eingeben:
oder
Dies zeigt eine Liste der verfügbaren Befehle an:
OutputAvailable commands:
bye Quit sftp
cd path Change remote directory to 'path'
chgrp grp path Change group of file 'path' to 'grp'
chmod mode path Change permissions of file 'path' to 'mode'
chown own path Change owner of file 'path' to 'own'
df [-hi] [path] Display statistics for current directory or
filesystem containing 'path'
exit Quit sftp
get [-Ppr] remote [local] Download file
help Display this help text
lcd path Change local directory to 'path'
. . .
Wir werden einige der Befehle erkunden, die Sie in den folgenden Abschnitten sehen.
Mit SFTP navigieren
Wir können durch die Dateihierarchie des entfernten Systems navigieren, indem wir eine Reihe von Befehlen verwenden, die ähnlich wie ihre Shell-Gegenstücke funktionieren.
Zuerst orientieren wir uns, indem wir herausfinden, in welchem Verzeichnis wir uns aktuell auf dem entfernten System befinden. Genauso wie in einer typischen Shell-Sitzung können wir Folgendes eingeben, um das aktuelle Verzeichnis zu erhalten:
OutputRemote working directory: /home/demouser
Wir können den Inhalt des aktuellen Verzeichnisses des entfernten Systems mit einem anderen vertrauten Befehl anzeigen:
OutputSummary.txt info.html temp.txt testDirectory
Beachten Sie, dass die Befehle innerhalb der SFTP-Schnittstelle nicht eins zu eins mit der typischen Shell-Syntax übereinstimmen und nicht so funktionsreich sind. Sie implementieren jedoch einige der wichtigeren optionalen Flags, wie das Hinzufügen von -la
zu ls
, um mehr Dateimetadaten und Berechtigungen anzuzeigen:
Outputdrwxr-xr-x 5 demouser demouser 4096 Aug 13 15:11 .
drwxr-xr-x 3 root root 4096 Aug 13 15:02 ..
-rw------- 1 demouser demouser 5 Aug 13 15:04 .bash_history
-rw-r--r-- 1 demouser demouser 220 Aug 13 15:02 .bash_logout
-rw-r--r-- 1 demouser demouser 3486 Aug 13 15:02 .bashrc
drwx------ 2 demouser demouser 4096 Aug 13 15:04 .cache
-rw-r--r-- 1 demouser demouser 675 Aug 13 15:02 .profile
. . .
Um zu einem anderen Verzeichnis zu gelangen, können wir diesen Befehl verwenden:
Wir können jetzt das entfernte Dateisystem durchsuchen, aber was ist, wenn wir auf unser lokales Dateisystem zugreifen müssen? Wir können Befehle auf das lokale Dateisystem lenken, indem wir sie mit einem l
für lokal versehen.
All die bisher besprochenen Befehle haben lokale Entsprechungen. Wir können das lokale Arbeitsverzeichnis ausdrucken:
OutputLocal working directory: /Users/demouser
Wir können den Inhalt des aktuellen Verzeichnisses auf der lokalen Maschine auflisten:
OutputDesktop local.txt test.html
Documents analysis.rtf zebra.html
Wir können auch das Verzeichnis ändern, mit dem wir auf dem lokalen System interagieren möchten:
Übertragen von Dateien mit SFTP
Wenn wir Dateien von unserem Remote-Host herunterladen möchten, können wir dies mit dem Befehl get
tun:
OutputFetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile 100% 37KB 36.8KB/s 00:01
Wie Sie sehen können, lädt der Befehl get
standardmäßig eine Remote-Datei in eine Datei mit demselben Namen auf dem lokalen Dateisystem herunter.
Wir können die Remote-Datei auf einen anderen Namen kopieren, indem wir den Namen danach angeben:
Der Befehl get
akzeptiert auch einige Optionsflags. Beispielsweise können wir ein Verzeichnis und alle seine Inhalte kopieren, indem wir die rekursive Option angeben:
Wir können SFTP anweisen, die entsprechenden Berechtigungen und Zugriffszeiten beizubehalten, indem wir das Flag -P
oder -p
verwenden:
Übertragen von lokalen Dateien auf das Remote-System
Das Übertragen von Dateien auf das Remote-System funktioniert genauso, nur mit einem put
-Befehl:
OutputUploading localFile to /home/demouser/localFile
localFile 100% 7607 7.4KB/s 00:00
Die gleichen Flags, die mit get
funktionieren, gelten auch für put
. Um beispielsweise ein ganzes lokales Verzeichnis zu kopieren, können Sie put -r
ausführen:
Ein vertrautes Werkzeug, das nützlich ist beim Herunterladen und Hochladen von Dateien, ist der Befehl df
, der ähnlich wie die Befehlszeilenversion funktioniert. Mit diesem können Sie überprüfen, ob Sie genügend Speicherplatz haben, um die gewünschten Übertragungen abzuschließen:
Output Size Used Avail (root) %Capacity
19.9GB 1016MB 17.9GB 18.9GB 4%
Bitte beachten Sie, dass es keine lokale Variante dieses Befehls gibt, aber wir können das umgehen, indem wir den Befehl !
verwenden.
Der Befehl !
versetzt uns in eine lokale Shell, in der wir jeden auf unserem lokalen System verfügbaren Befehl ausführen können. Wir können den Festplattenplatz überprüfen, indem wir eingeben:
und dann
OutputFilesystem Size Used Avail Capacity Mounted on
/dev/disk0s2 595Gi 52Gi 544Gi 9% /
devfs 181Ki 181Ki 0Bi 100% /dev
map -hosts 0Bi 0Bi 0Bi 100% /net
map auto_home 0Bi 0Bi 0Bi 100% /home
Jeder andere lokale Befehl funktioniert wie erwartet. Um zu Ihrer SFTP-Sitzung zurückzukehren, geben Sie ein:
Sie sollten jetzt die SFTP-Aufforderung zurückkehren sehen.
Einfache Dateimanipulationen mit SFTP
SFTP ermöglicht Ihnen, einige Arten von Dateisystemwartung durchzuführen. Beispielsweise können Sie den Besitzer einer Datei auf dem entfernten System mit ändern:
Beachten Sie, dass im Gegensatz zum System-Befehl chmod
der SFTP-Befehl keine Benutzernamen akzeptiert, sondern stattdessen UIDs verwendet. Leider gibt es keine eingebaute Möglichkeit, die entsprechende UID innerhalb der SFTP-Schnittstelle zu ermitteln.
Als Workaround können Sie aus der Datei /etc/passwd
lesen, die in den meisten Linux-Umgebungen Benutzernamen mit UIDs verknüpft:
Outputroot:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
. . .
Beachten Sie, wie wir den Befehl !
nicht alleine verwendet haben, sondern als Präfix für einen lokalen Shell-Befehl. Dies funktioniert, um jeden Befehl auszuführen, der auf unserem lokalen Rechner verfügbar ist, und hätte mit dem lokalen Befehl df
früher verwendet werden können.
Die UID befindet sich in der dritten Spalte der Datei, wie durch Doppelpunkte abgegrenzt.
Ebenso können wir den Gruppenbesitzer einer Datei mit dem folgenden Befehl ändern:
Es gibt wiederum keine integrierte Möglichkeit, eine Liste der Gruppen des entfernten Systems zu erhalten. Wir können dies mit dem folgenden Befehl umgehen:
Outputroot:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
. . .
Die dritte Spalte enthält die ID der Gruppe, die mit dem Namen in der ersten Spalte verbunden ist. Das ist, wonach wir suchen.
Der chmod
SFTP-Befehl funktioniert auf dem entfernten Dateisystem wie gewohnt:
OutputChanging mode on /home/demouser/publicFile
Es gibt keinen äquivalenten Befehl zum Manipulieren von lokalen Dateiberechtigungen, aber Sie können das lokale umask setzen, sodass alle auf das lokale System kopierten Dateien ihre entsprechenden Berechtigungen haben werden.
Dies kann mit dem Befehl lumask
erfolgen:
OutputLocal umask: 022
Jetzt werden alle regulären Dateien, die heruntergeladen werden (solange das Flag -p
nicht verwendet wird), die Berechtigungen 644 haben.
SFTP ermöglicht es auch, Verzeichnisse auf lokalen und entfernten Systemen mit lmkdir
bzw. mkdir
zu erstellen.
Die restlichen Dateibefehle beziehen sich ausschließlich auf das entfernte Dateisystem:
Diese Befehle replizieren das Kernverhalten ihrer Shell-Äquivalente. Wenn Sie diese Aktionen auf dem lokalen Dateisystem ausführen müssen, denken Sie daran, dass Sie durch Ausgabe dieses Befehls in eine Shell wechseln können:
Oder führen Sie einen einzelnen Befehl auf dem lokalen System aus, indem Sie den Befehl mit !
voranstellen, wie folgt:
Wenn Sie mit Ihrer SFTP-Sitzung fertig sind, verwenden Sie exit
oder bye
, um die Verbindung zu schließen.
Zusammenfassung
Auch wenn die SFTP-Syntax bei weitem nicht so umfassend ist wie moderne Shell-Tools, kann sie nützlich sein, um die Kompatibilität mit der alten FTP-Syntax sicherzustellen oder um die Funktionalität für entfernte Benutzer in bestimmten Umgebungen sorgfältig einzuschränken.
Zum Beispiel können Sie SFTP verwenden, um bestimmten Benutzern das Übertragen von Dateien ohne SSH-Zugriff zu ermöglichen. Weitere Informationen zu diesem Prozess finden Sie in unserem Tutorial zum Thema So aktivieren Sie SFTP ohne Shell-Zugriff.
Wenn Sie es gewohnt sind, FTP oder SCP zum Übertragen von Dateien zu verwenden, ist SFTP eine gute Möglichkeit, die Stärken beider zu nutzen. Auch wenn es nicht für jede Situation geeignet ist, ist es ein flexibles Werkzeug, das Sie in Ihrem Repertoire haben sollten.