Sichere Dateiübertragung mit SCP und SFTP über SSH

Übertragen Sie Dateien sicher mit SCP und SFTP über SSH, einschließlich praktischer Befehle, Schlüsselauthentifizierung und sichererer serverseitiger Zugriffskontrollen.

So übertragen Sie Dateien sicher mit SCP und SFTP über SSH

Das Übertragen von Dateien zwischen lokalen und entfernten Systemen ist eine grundlegende Anforderung der Systemadministration und Entwicklung. Die Verwendung unverschlüsselter Protokolle wie Standard-FTP oder R-Befehle setzt jedoch vertrauliche Daten dem Risiko des Abfangens und von Angriffen aus. Das Secure Shell (SSH)-Protokoll bietet zwei robuste, verschlüsselte Methoden für die Dateiübertragung: das Secure Copy Protocol (SCP) und das SSH File Transfer Protocol (SFTP).

Diese Anleitung erklärt, wann SCP und wann SFTP verwendet werden sollte und wie die häufigen Fehler vermieden werden können, die eine sichere Dateiübertragung in der Praxis weniger sicher machen.

Grundlagen verstehen: SSH

Sowohl SCP als auch SFTP nutzen SSH (normalerweise auf Port 22) als zugrunde liegende Transportschicht. Wenn Sie eine Übertragung mit einem der beiden Protokolle starten, stellt SSH zunächst einen sicheren, verschlüsselten Tunnel zwischen dem Client und dem Server her. Alle Daten, einschließlich der Authentifizierungsdaten und des Dateiinhalts, werden durch diesen Tunnel übertragen, was beide Methoden zu hochsicheren Alternativen zu älteren Dateiübertragungsprotokollen macht.

Wichtige Funktionen der SSH-Grundlage:

  • Verschlüsselung: Alle Daten werden Ende-zu-Ende verschlüsselt.
  • Authentifizierung: Unterstützt sowohl die Passwortauthentifizierung als auch die weitaus sicherere Authentifizierung mit öffentlichem/privatem Schlüsselpaar.
  • Integrität: Verwendet kryptografisches Hashing, um sicherzustellen, dass Dateien während der Übertragung nicht verändert werden.

Secure Copy Protocol (SCP)

SCP ist ein Netzwerkprotokoll, das auf dem Remote-Copy-Protokoll (rcp) basiert, aber mit der Sicherheit von SSH umhüllt ist. Es ist auf Einfachheit und Geschwindigkeit ausgelegt und eignet sich ideal für schnelle, nicht-interaktive Übertragungen, insbesondere in Skripten oder der Automatisierung.

SCP-Funktionen und -Eigenschaften

  1. Einfachheit: Verwendet eine Syntax, die dem Standard-Unix-Befehl cp sehr ähnlich ist.
  2. Geschwindigkeit: Oft schnell für einfache einmalige Kopien, obwohl die Leistung von der SSH-Implementierung, der Verschlüsselung, dem Netzwerk und der Dateimenge abhängt.
  3. Nicht-interaktiv: Nach dem Start läuft die Übertragung bis zum Abschluss, ohne dass die Sitzung verwaltet oder der Übertragungsstatus unterbrochen werden kann.

Praktische SCP-Befehle

Die allgemeine Syntax für SCP lautet scp [Optionen] [Quelle] [Ziel].

1. Kopieren einer Datei vom lokalen auf den entfernten Server

Um eine lokale Datei in das Home-Verzeichnis eines entfernten Benutzers zu übertragen:

scp /pfad/zur/lokalen/datei.txt benutzer@remote_host:/home/benutzer/ziel/

2. Kopieren einer Datei vom entfernten auf das lokale System

Um eine Datei vom Server in Ihr aktuelles Verzeichnis herunterzuladen:

scp benutzer@remote_host:/var/log/system.log .
# Hinweis: Der Punkt '.' bezeichnet das aktuelle lokale Verzeichnis

3. Kopieren eines gesamten Verzeichnisses (rekursiv)

Verwenden Sie das Flag -r (rekursiv), um Verzeichnisse und alle ihre Inhalte zu kopieren:

scp -r /pfad/zum/lokalen/ordner/ benutzer@remote_host:/daten/backups/

4. Angeben eines nicht standardmäßigen Ports

Wenn Ihr SSH-Daemon auf einem anderen Port als 22 läuft, verwenden Sie das Flag -P (beachten Sie das große P):

scp -P 2222 lokale_datei.zip benutzer@remote_host:/tmp/

Hinweis zu SCP: Das traditionelle SCP-Protokollverhalten hat in der Vergangenheit Risiken bei der Behandlung von Dateinamen und Pfaden aufgewiesen. Einige moderne OpenSSH-Clients verwenden standardmäßig SFTP unter der Haube für scp, aber nicht jeder Client oder Server verhält sich gleich. Für neue Arbeitsabläufe bevorzugen Sie SFTP oder rsync über SSH, es sei denn, Sie benötigen speziell SCP-Kompatibilität.

SSH File Transfer Protocol (SFTP)

SFTP ist ein Subsystem von SSH, das eine umfangreichere, interaktive Umgebung für die Dateiverwaltung bietet. Im Gegensatz zu SCP, das ein reines Kopierwerkzeug ist, ist SFTP ein zustandsbehaftetes Protokoll, das das Auflisten, Löschen, Umbenennen und Erstellen von Verzeichnissen über dieselbe SSH-geschützte Verbindung ermöglicht.

SFTP-Funktionen und -Eigenschaften

  1. Interaktive Sitzung: Übertragungen finden innerhalb einer dedizierten, interaktiven Shell-Sitzung statt.
  2. Robustheit: Unterstützt Suchen, Fortsetzen und Verwalten einzelner Übertragungen innerhalb der Sitzung.
  3. Vollständige Verwaltung: Ermöglicht das Auflisten (ls), Wechseln von Verzeichnissen (cd) und Bearbeiten von entfernten und lokalen Dateien mit Sitzungsbefehlen (put, get, lcd, lmkdir).
  4. Sicherheit: Verwendet SSH für den Transport und ist die bessere Standardeinstellung für moderne interaktive Dateiübertragungen.

Praktische SFTP-Befehle

1. Herstellen einer SFTP-Verbindung

Starten Sie eine interaktive Sitzung zum entfernten Server:

sftp benutzer@remote_host

Bei Verwendung eines bestimmten Ports:

sftp -P 2222 benutzer@remote_host

2. Interaktive SFTP-Befehle

Nach der Verbindung arbeiten Sie standardmäßig in der entfernten Umgebung. Verwenden Sie Befehle, um Übertragungen und Verzeichnisse zu verwalten:

Befehl Beschreibung Beispiel
ls Entfernte Dateien auflisten ls -l
cd Entferntes Verzeichnis wechseln cd /var/www/html
put Datei hochladen (Lokal zu Entfernt) put lokale_daten.zip
get Datei herunterladen (Entfernt zu Lokal) get server_backup.tar.gz
lcd Lokales Verzeichnis wechseln lcd /Users/ich/downloads
lpwd Lokales Arbeitsverzeichnis anzeigen lpwd
mkdir Entferntes Verzeichnis erstellen mkdir neues_projekt
quit SFTP-Sitzung beenden quit

Beispiel: Hoch- und Herunterladen innerhalb einer SFTP-Sitzung

$ sftp [email protected]
sftp> cd /daten/backups
sftp> lcd /home/lokal/berichte
sftp> put tagesbericht.csv  # Lädt die Datei hoch
Uploading tagesbericht.csv to /daten/backups/tagesbericht.csv
tagesbericht.csv                                      100% 512KB   4.3MB/s   00:00    
sftp> get konfiguration.yaml  # Lädt eine Datei herunter
Fetching /daten/backups/konfiguration.yaml to konfiguration.yaml
konfiguration.yaml                                    100% 20KB    1.1MB/s   00:00    
sftp> quit

SCP vs. SFTP: Das richtige Werkzeug auswählen

Obwohl beide Protokolle sicher sind, dienen sie unterschiedlichen betrieblichen Anforderungen:

Funktion Secure Copy Protocol (SCP) SSH File Transfer Protocol (SFTP)
Mechanismus Einfaches Kopierprotokoll (Nicht-interaktiv) Interaktives Dateiverwaltungsprotokoll (Zustandsbehaftet)
Anwendungsfall Schnelle, einzelne Dateiübertragungen; Skripterstellung/Automatisierung. Komplexe Übertragungen; Verzeichnisverwaltung; interaktive Sitzungen.
Geschwindigkeit Oft gut für einfache Kopien. Normalerweise schnell genug, mit mehr Dateiverwaltungsfunktionen.
Fortsetzung Eingeschränkt; für robustes Fortsetzungsverhalten ein anderes Tool verwenden. Unterstützt kontrolliertere Übertragungsvorgänge, aber das Fortsetzungsverhalten des Clients variiert.
Sicherheitsstatus Kompatibilitätswerkzeug; traditionelles Protokoll hat Designbedenken. Bessere Standardeinstellung für verwaltete Dateiübertragung über SSH.

Wann SCP verwendet werden sollte: Verwenden Sie SCP, wenn Sie maximale Geschwindigkeit für eine einfache Dateiübertragung benötigen und den Befehl in einem Skript ausführen, bei dem Nicht-Interaktivität bevorzugt wird.

Wann SFTP verwendet werden sollte: Verwenden Sie SFTP für praktisch alle manuellen Dateiübertragungen, wenn Sie mehrere Dateien verwalten, Verzeichnisse wechseln oder Sitzungsrobustheit und moderne Sicherheitsfunktionen benötigen.

Best Practices für sichere Dateiübertragungen

Die Verwendung von SCP oder SFTP ist nur der erste Schritt. Eine ordnungsgemäße Sicherheitskonfiguration auf dem SSH-Server ist unerlässlich, um die entfernte Umgebung zu schützen.

1. SSH-Schlüsselauthentifizierung priorisieren

Die passwortbasierte Authentifizierung ist anfällig für Brute-Force-Angriffe. Verwenden Sie immer öffentliche/private SSH-Schlüsselpaare zur Authentifizierung von Dateiübertragungen. Die Schlüsselverwendung eliminiert das Risiko einer Passwortkompromittierung bei automatisierten oder manuellen Übertragungen.

Schlüssel generieren (falls erforderlich):

ssh-keygen -t ed25519 -C "datei-uebertragung"

Verwenden eines bestimmten Schlüssels für die Übertragung:

scp -i ~/.ssh/mein_uebertragungsschluessel datei.txt benutzer@remote_host:/tmp/
# oder
sftp -i ~/.ssh/mein_uebertragungsschluessel benutzer@remote_host

2. Root-Login deaktivieren

Erlauben Sie niemals direkte Dateiübertragungen mit dem Benutzer root. Übertragungen sollten immer von einem dedizierten Benutzerkonto mit niedrigen Privilegien durchgeführt werden. Wenn administrativer Zugriff erforderlich ist, können Dateien nach der Übertragung lokal auf dem entfernten Rechner mit sudo an den entsprechenden Ort verschoben werden.

3. Zugriff mit ChrootDirectory einschränken (SFTP)

Für Systeme, die SFTP-Zugriff für externe oder nicht vertrauenswürdige Benutzer bereitstellen, implementieren Sie ChrootDirectory-Einschränkungen in der Datei sshd_config. Dies sperrt den SFTP-Benutzer in ein bestimmtes Verzeichnis und verhindert, dass er den Rest des Dateisystems durchsuchen kann.

Beispielkonfigurationsausschnitt in /etc/ssh/sshd_config:

Match User sftp_externer_benutzer
  ForceCommand internal-sftp
  ChrootDirectory /var/sftp/%u
  AllowTcpForwarding no
  X11Forwarding no

4. Berechtigungen einschränken

Stellen Sie sicher, dass das für Übertragungen verwendete Benutzerkonto nur die minimalen Berechtigungen hat, die für seine Aufgabe erforderlich sind (Prinzip der geringsten Privilegien). Wenn ein Benutzer nur Dateien in /daten/uploads hochladen muss, stellen Sie sicher, dass er keine Dateien in /etc/config löschen kann.

Fazit

Verwenden Sie SFTP als Standard, wenn Sie Dateien interaktiv durchsuchen, hochladen, herunterladen oder verwalten müssen. Verwenden Sie SCP für einfache Kompatibilitätsfälle, bei denen Sie dem Server vertrauen und das Client-Verhalten verstehen. Kombinieren Sie den Befehl in beiden Fällen mit SSH-Schlüsseln, Konten mit geringsten Privilegien und strengen Verzeichnisberechtigungen.