Wie man Dateien sicher mit einem Remote-Server über SFTP überträgt

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:

  1. ssh sammy@your_server_ip_or_remote_hostname

Wenn das funktioniert, verlassen Sie die Verbindung, indem Sie Folgendes eingeben:

  1. exit

Jetzt können wir eine SFTP-Sitzung aufbauen, indem wir den folgenden Befehl eingeben:

  1. sftp sammy@your_server_ip_or_remote_hostname

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:

  1. sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

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:

  1. help

oder

  1. ?

Dies zeigt eine Liste der verfügbaren Befehle an:

Output
Available 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.

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:

  1. pwd
Output
Remote working directory: /home/demouser

Wir können den Inhalt des aktuellen Verzeichnisses des entfernten Systems mit einem anderen vertrauten Befehl anzeigen:

  1. ls
Output
Summary.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:

  1. ls -la
Output
drwxr-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:

  1. cd testDirectory

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:

  1. lpwd
Output
Local working directory: /Users/demouser

Wir können den Inhalt des aktuellen Verzeichnisses auf der lokalen Maschine auflisten:

  1. lls
Output
Desktop 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:

  1. lcd Desktop

Übertragen von Dateien mit SFTP

Wenn wir Dateien von unserem Remote-Host herunterladen möchten, können wir dies mit dem Befehl get tun:

  1. get remoteFile
Output
Fetching /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:

  1. get remoteFile localFile

Der Befehl get akzeptiert auch einige Optionsflags. Beispielsweise können wir ein Verzeichnis und alle seine Inhalte kopieren, indem wir die rekursive Option angeben:

  1. get -r someDirectory

Wir können SFTP anweisen, die entsprechenden Berechtigungen und Zugriffszeiten beizubehalten, indem wir das Flag -P oder -p verwenden:

  1. get -Pr someDirectory

Übertragen von lokalen Dateien auf das Remote-System

Das Übertragen von Dateien auf das Remote-System funktioniert genauso, nur mit einem put-Befehl:

  1. put localFile
Output
Uploading 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:

  1. put -r localDirectory

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:

  1. df -h
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:

  1. !

und dann

  1. df -h
Output
Filesystem 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:

  1. exit

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:

  1. chown userID file

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:

  1. get /etc/passwd
  2. !less passwd
Output
root: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:

  1. chgrp groupID file

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:

  1. get /etc/group
  2. !less group
Output
root: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:

  1. chmod 777 publicFile
Output
Changing 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:

  1. lumask 022
Output
Local 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:

  1. ln
  2. rm
  3. rmdir

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:

  1. !

Oder führen Sie einen einzelnen Befehl auf dem lokalen System aus, indem Sie den Befehl mit ! voranstellen, wie folgt:

  1. !chmod 644 somefile

Wenn Sie mit Ihrer SFTP-Sitzung fertig sind, verwenden Sie exit oder bye, um die Verbindung zu schließen.

  1. bye

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.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server