SFTP oder Secure File Transfer Protocol ist ein sicheres Dienstprogramm zur Fernübertragung von Dateien, das auf dem File Transfer Protocol (FTP) basiert.

Der FTP-Verkehr ist unverschlüsselt und unsicher, weshalb er größtenteils durch SFTP ersetzt worden ist.

SFTP läuft standardmäßig über das SSH-Protokoll an TCP-Port 22 und bietet die gleichen Sicherheits- und Verschlüsselungsfunktionen wie SSH. Der standardmäßige SSH-Daemon, der als Teil des OpenSSH-Servers auf Linux-Systemen läuft, unterstützt standardmäßig die grundlegenden Funktionen des SFTP-Protokolls. Es gibt jedoch auch spezielle Software wie vsftpd, die konfiguriert werden kann, um zusätzliche Funktionen und Anpassungen zu erhalten.

In diesem Artikel werden wir die Verwendung von SFTP über die Befehlszeile behandeln. Ich verwende ein Ubuntu-System, obwohl die hier aufgeführten Befehle auf jedem Linux-System mit sftp-Client funktionieren.

Bevor wir uns mit den Befehlen befassen, sollten Sie wissen, dass SCP veraltet ist und Sie sich als Alternative mit dem SFTP-Befehl vertraut machen sollten. Sie können mit SFTP so ziemlich alles tun, was Sie auch mit SCP tun können.

Kopieren von Dateien

SFTP kann in einigen unterstützten Anwendungsfällen den Befehl SCP (Secure Copy) ersetzen. Ein solcher Fall ist die Verwendung von SCP, um Dateien in einem Rutsch von einem entfernten Server zu übertragen oder von dort abzuholen.

Die Syntax für das Hochladen mit dem SCP-Befehl lautet wie folgt:

$ scp {local-path} {user}@{remote-host}:{remote-path}

Und für das Herunterladen etwa so:

$ scp {user}@{remote-host}:{remote-file-path} {local-path}

In ähnlicher Weise können wir die folgende sftp-Befehlssyntax verwenden, um Dateien auf einen entfernten Server hochzuladen:

$ sftp {user}@{host}:{remote-path} <<< $'put {local-path}'

Nachfolgend sehen Sie eine Demo, die das Hochladen von Dateien mit sftp als Einzeiler zeigt:

$ sftp ftpuser@192.168.1.231:/home/ftpuser/remote_test_dir <<< $'put /home/abhisheknair/new_file'
ftpuser@192.168.1.231's password:
Verbunden mit 192.168.1.231.
Wechselt zu: /home/ftpuser/remote_test_dir
sftp> put /home/abhisheknair/neue_datei
Hochladen von /home/abhisheknair/new_file nach /home/ftpuser/remote_test_dir/new_file
/home/abhisheknair/neue_datei 100% 9 7.2KB/s 00:00
$

Um eine Datei von einem entfernten Server herunterzuladen, verwenden Sie die folgende Befehlssyntax:

$ sftp {user}@{remote-host}:{remote-file-name} {local-file-name}

Hier sehen Sie ein Beispiel für das Herunterladen einer Datei in einer Zeile mit sftp:

$ sftp ftpuser@192.168.1.231:/home/ftpuser/new_file1 /home/abhisheknair/new_local_dir
ftpuser@192.168.1.231's password:
Verbunden mit 192.168.1.231.
Holt /home/ftpuser/new_file1 nach /home/abhisheknair/new_local_dir/new_file1
/home/ftpuser/neue_datei1 100% 12 3.6KB/s 00:00
$

Sie können auch den SSH-Schlüssel für eine passwortlose Authentifizierung austauschen.

Verbinden mit einem SFTP-Server

Um eine SFTP-Verbindung zu initiieren, verwenden Sie den Befehl sftp mit einem Benutzernamen und dem Namen oder der IP-Adresse des entfernten Hosts. Der Standard-TCP-Port 22 sollte geöffnet sein, damit dies funktioniert, oder Sie geben den Port explizit mit dem Flag -oPort an.

Ich stelle eine Verbindung zu einem SFTP-Server mit der IP 192.168.1.231 her. Wenn Sie sich zum ersten Mal mit einem SFTP-Server verbinden, werden Sie aufgefordert, den Fingerabdruck des Servers wie bei SSH zu bestätigen. Sobald Sie dies mit“Ja” bestätigt haben, wird die Verbindung fortgesetzt und Sie werden zur Eingabe eines Benutzerkennworts aufgefordert.

Bei einer erfolgreichen Verbindung wird Ihnen die Eingabeaufforderung sftp> angezeigt.

$ sftp ftpuser@192.168.1.231
Die Authentizität des Hosts '192.168.1.231 (192.168.1.231)' kann nicht festgestellt werden.
Der Fingerabdruck des ECDSA-Schlüssels lautet SHA256:k90E28Pfnjoiq1svFw18dA2mazweoCmR5Hqi8SH0mj0.
Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (ja/nein/[Fingerabdruck])? ja
Warnung: Der Liste der bekannten Hosts wurde dauerhaft '192.168.1.231' (ECDSA) hinzugefügt.
ftpuser@192.168.1.231's password:
Verbunden mit 192.168.1.231.
sftp>

Version prüfen

Sie können die SFTP-Version mit dem Befehl version an der sftp-Eingabeaufforderung überprüfen.

sftp> Version
SFTP-Protokoll Version 3
sftp>

Hilfe erhalten

Um Hilfe zu den verfügbaren Befehlen und der Syntax für SFTP zu erhalten, verwenden Sie ‘?‘ oder‘help‘.

sftp> ?
Verfügbare Befehle:
bye Beenden von sftp
cd path Entferntes Verzeichnis in 'path' ändern
chgrp [-h] grp path Gruppe der Datei 'path' in 'grp' ändern
chmod [-h] mode path Ändern Sie die Berechtigungen der Datei 'path' auf 'mode'
chown [-h] own path Eigentümer der Datei 'path' auf 'own' ändern
df [-hi] <x><x>[Pfad]</x></x> Zeigt Statistiken für das aktuelle Verzeichnis oder
dateisystem, das 'pfad' enthält
exit Beenden von sftp
get [-afpR] remote <x>[local]</x> Datei herunterladen
help Diesen Hilfetext anzeigen
lcd path Lokales Verzeichnis in 'path' ändern
lls [ls-options <x><x>[pfad]</x></x>] Lokale Verzeichnisliste anzeigen
lmkdir path Lokales Verzeichnis erstellen
ln [-s] alterpfad neuerpfad Entfernte Datei verknüpfen (-s für Symlink)
lpwd Lokales Arbeitsverzeichnis ausgeben
ls [-1afhlnrSt] <x><x>[Pfad]</x></x> Liste der entfernten Verzeichnisse anzeigen
lumask umask Lokale umask auf 'umask' setzen
mkdir path Entferntes Verzeichnis erstellen
progress Anzeige der Fortschrittsanzeige ein- und ausschalten
put [-afpR] local <x>[remote]</x> Datei hochladen
pwd Anzeige des entfernten Arbeitsverzeichnisses
quit Beenden von sftp
reget [-fpR] remote <x>[local]</x> Herunterladen der Datei fortsetzen
rename oldpath newpath Umbenennen der entfernten Datei
reput [-fpR] local <x>[remote]</x> Upload-Datei fortsetzen
rm path Entfernte Datei löschen
rmdir path Entferntes Verzeichnis entfernen
symlink alterPfad neuerPfad Ferndatei symlinken
version Zeigt die SFTP-Version an
!command Ausführen von 'command' in der lokalen Shell
! Escape zur lokalen Shell
? Synonym für Hilfe
sftp>

Arbeitsverzeichnis anzeigen

Wenn Sie mit einem entfernten Server verbunden sind, können Sie mit dem Befehl pwd das aktuelle Arbeitsverzeichnis des entfernten Systems anzeigen.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp>

Um das aktuelle Arbeitsverzeichnis des lokalen Systems anzuzeigen, verwenden Sie den Befehl lpwd.

sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair
sftp>

Dateien auflisten

Sie können die Dateien im entfernten Arbeitsverzeichnis mit dem Befehl ls auflisten.

sftp> ls
remote_datei1 remote_datei2 remote_datei3 remote_test_dir
sftp>

Um Dateien im lokalen Arbeitsverzeichnis aufzulisten, verwenden Sie den Befehl lls.

sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp>

Wechseln der Verzeichnisse

Das Umschalten des entfernten Arbeitsverzeichnisses kann mit dem Befehl cd durchgeführt werden. Siehe Beispiel unten:

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> cd remote_test_dir
sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser/remote_test_dir
sftp>

Um das lokale Arbeitsverzeichnis zu wechseln, verwenden Sie den Befehl lcd. Im Folgenden finden Sie ein einfaches Beispiel, das die Verwendung von lcd zeigt.

sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lcd testdir
sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair/testdir
sftp>

Dateien hochladen

Um eine einzelne Datei hochzuladen, verwenden Sie den Befehl put. Sehen Sie, wie ich mit dem Befehl put die lokale Datei file1 in das entfernte Arbeitsverzeichnis hochlade. Ich kann dies mit dem Befehl ls überprüfen, der den Inhalt des entfernten Arbeitsverzeichnisses ausgibt.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> put datei1
Hochladen von file1 nach /home/ftpuser/file1
file1 100% 6 6.0KB/s 00:00
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Um mehrere Dateien in einem Rutsch hochzuladen, können wir den Befehl mput verwenden (siehe unten). Ich verwende mput mit einem regulären Ausdrucksmuster file[23], das im Wesentlichen file2 und file3 hochlädt und file1 überspringt, da diese bereits im vorherigen Schritt hochgeladen wurde. Sie können jeden Platzhalter oder regulären Ausdruck mit mput verwenden.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpBenutzer
sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> mput datei<x>[23</x>]
Hochladen von file2 nach /home/ftpuser/file2
file2 100% 6 6.5KB/s 00:00
Hochladen von Datei3 nach /home/ftpuser/file3
file3 100% 6 5.3KB/s 00:00
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Dateien herunterladen

Einzelne Dateien können über SFTP mit dem Befehl get heruntergeladen werden. Hier ist ein Beispiel, bei dem ich remote_file4 mit sftp heruntergeladen habe:

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser/remote_test_dir
sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair/testdir
sftp> ls
entfernte_datei4
sftp> lls
datei4
sftp> get remote_datei4
Abruf von /home/ftpuser/remote_test_dir/remote_file4 nach remote_file4
/home/ftpuser/remote_test_dir/remote_file4 100% 13 5.2KB/s 00:00
sftp> lls
file4 entfernte_datei4
sftp>

Um mehrere Dateien herunterzuladen, verwenden Sie den Befehl <strong>mget</strong>. Ich lade hier alle Dateien, die dem Muster remote_file* im entfernten Arbeitsverzeichnis entsprechen, in mein lokales Arbeitsverzeichnis herunter. Schließlich verwende ich den Befehl <strong>lls</strong>, um die heruntergeladenen Dateien zu sehen.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair/testdir
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> ls
datei4 entfernte_datei4
sftp> mget entfernte_datei*
Abruf von /home/ftpuser/remote_file1 nach remote_file1
/home/ftpuser/remote_file1 100% 12 5.9KB/s 00:00
Abruf von /home/ftpuser/remote_file2 nach remote_file2
/home/ftpuser/remote_file2 100% 13 5.8KB/s 00:00
Abrufen von /home/ftpuser/remote_file3 nach remote_file3
/home/ftpuser/remote_file3 100% 13 7.3KB/s 00:00
sftp> lls
file4 remote_file1 remote_file2 remote_file3 remote_file4
sftp>

Verzeichnis erstellen

Mit dem Befehl mkdir können Sie ein neues Verzeichnis auf einem entfernten Server erstellen.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> mkdir new_dir
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Wenn Sie von der sftp-Eingabeaufforderung aus ein neues Verzeichnis im aktuellen Arbeitsverzeichnis des lokalen Systems erstellen möchten, verwenden Sie den Befehl lmkdir.

sftp> lpwd
Lokales Arbeitsverzeichnis: /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lmkdir neues_lokales_Verzeichnis
sftp> lls
bin file1 file2 file3 lib new_local_dir oci-scripts sys_info.sh test.tgz testdir
sftp>

Verzeichnis entfernen

Ein leeres Remote-Verzeichnis kann mit dem Befehl rmdir entfernt werden. Beachten Sie, dass Sie eine Fehlermeldung erhalten, wenn das Verzeichnis nicht leer ist.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> rmdir new_dir
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>

Datei entfernen

Eine entfernte Datei kann mit dem Befehl rm entfernt werden.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> rm entfernte_datei3
Entfernen von /home/ftpuser/remote_file3
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp>

Datei umbenennen

Eine entfernte Datei kann auch einfach mit dem Befehl rename umbenannt werden.

sftp> pwd
Entferntes Arbeitsverzeichnis: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp> umbenennen entfernte_datei1 neue_datei1
sftp> ls
file1 file2 file3 new_file1 remote_file2 remote_test_dir
sftp>

Dateisystem Verwendung

Um Statistiken für das aktuelle Verzeichnis oder Dateisystem, das ‘path’ enthält, anzuzeigen, verwenden Sie den Befehl df. Mit der Option -h können Sie die Statistiken in einem für Menschen lesbaren Format anzeigen. Beachten Sie bitte, dass die angezeigten Statistiken für das jeweilige Dateisystem des entfernten SFTP-Servers gelten und nicht für das Dateisystem des lokalen Rechners.

sftp> df
        Größe Used Avail (root) Êpacity
    17811456 1845472 15965984 15965984 10%
sftp> df -h
    Größe Used Avail (root) Êpacity
  17.0GB 1.8GB 15.2GB 15.2GB 10%
sftp>

SFTP-Sitzung beenden

Um die SFTP-Sitzung zu beenden, verwenden Sie entweder den Befehl bye, exit oder quit. Nach dem Beenden von SFTP kehren Sie zur Eingabeaufforderung Ihres Betriebssystems zurück.

sftp> exit
$

Fazit

SFTP ist eine der besten verfügbaren Optionen, die sowohl sicher als auch einfach zu bedienen ist. Es bietet sowohl CLI- als auch GUI-Funktionen und wird von verschiedenen Plattformen unterstützt. Lesen Sie die sftp Manpage für weitere Informationen.

$ man sftp

Wenn Sie mehr erfahren möchten, schauen Sie sich diesen Udemy Linux Mastery Kurs an.