Sichere Dateiübertragung mit SCP und SFTP über SSH

Meistern Sie die Kunst der sicheren Dateiübertragung mit SSH. Dieser umfassende Leitfaden beschreibt die Unterschiede, Vor- und Nachteile des Secure Copy Protocol (SCP) und des SSH File Transfer Protocol (SFTP). Erfahren Sie die wesentliche Befehlszeilensyntax für beide Methoden, einschließlich Beispielen für lokale zu entfernten und entfernte zu lokalen Übertragungen. Wir behandeln auch wichtige Sicherheitspraktiken, wie z. B. SSH-Schlüsselauthentifizierung und Benutzerbeschränkung, um sicherzustellen, dass Ihre Daten bei jeder Übertragung verschlüsselt und geschützt bleiben.

39 Aufrufe

Wie man Dateien sicher mit SCP und SFTP über SSH überträgt

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

Dieser Leitfaden erläutert, wie SCP und SFTP die SSH-Verschlüsselung nutzen, um die Datenintegrität und Vertraulichkeit während der Übertragung zu gewährleisten. Wir werden die Stärken und Schwächen jedes Protokolls untersuchen, praktische Befehlszeilenbeispiele bereitstellen und kritische Best Practices für die sichere Dateiverwaltung aufzeigen.

Die Grundlage verstehen: SSH

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

Die von der SSH-Grundlage bereitgestellten Hauptmerkmale:

  • Verschlüsselung: Alle Daten sind Ende-zu-Ende verschlüsselt.
  • Authentifizierung: Unterstützt sowohl die Passwort-Authentifizierung als auch die wesentlich sicherere Public/Private-Key-Pair-Authentifizierung.
  • 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 Protocol (rcp) basiert, aber mit der Sicherheit von SSH ummantelt ist. Es ist auf Einfachheit und Geschwindigkeit ausgelegt, was es ideal für schnelle, nicht-interaktive Übertragungen macht, insbesondere in Skripten oder der Automatisierung.

SCP-Funktionen und -Merkmale

  1. Einfachheit: Verwendet eine Syntax, die dem Standard-Unix-Befehl cp sehr ähnlich ist.
  2. Geschwindigkeit: Im Allgemeinen schneller als SFTP, da es keine interaktiven Bestätigungen oder Sitzungseinrichtungen erfordert, sondern sich ausschließlich auf den zugrunde liegenden SSH-Tunnel verlässt.
  3. Nicht-Interaktiv: Nach dem Start läuft die Übertragung bis zum Abschluss, ohne die Möglichkeit, die Sitzung zu verwalten oder den Übertragungsstatus zu unterbrechen.

Praktische SCP-Befehle

Die allgemeine Syntax für SCP ist scp [options] [source] [destination].

1. Kopieren einer Datei vom lokalen auf den Remote-Server

Um eine lokale Datei in das Home-Verzeichnis eines Remote-Benutzers zu verschieben:

scp /path/to/local/file.txt user@remote_host:/home/user/destination/

2. Kopieren einer Datei vom Remote- auf das lokale System

Um eine Datei vom Server in Ihr aktuelles Verzeichnis zu holen:

scp user@remote_host:/var/log/system.log . 
# Hinweis: Der '.' zeigt das aktuelle lokale Verzeichnis an

3. Kopieren eines gesamten Verzeichnisses (Rekursiv)

Verwenden Sie das -r (rekursiv)-Flag, um Verzeichnisse und deren gesamten Inhalt zu kopieren:

scp -r /path/to/local/folder/ user@remote_host:/data/backups/

4. Angabe eines nicht standardmäßigen Ports

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

scp -P 2222 local_file.zip user@remote_host:/tmp/

Hinweis zur SCP-Veralterung: Obwohl sehr nützlich, wird SCP als veraltetes Protokoll betrachtet. Moderne Systeme empfehlen zunehmend die Verwendung von SFTP oder Rsync über SSH aufgrund bekannter Schwachstellen im SCP-Protokolldesign, insbesondere in Bezug auf die Dateinamensmanipulation.

SSH File Transfer Protocol (SFTP)

SFTP ist ein Subsystem von SSH, das eine reichhaltigere, interaktive Umgebung für die Dateiverwaltung bietet. Im Gegensatz zu SCP, das ein reines Kopierwerkzeug ist, ist SFTP ein zustandsbehaftetes Protokoll, das eine detaillierte Sitzungssteuerung, Dateilisten, Löschen, Umbenennen und Verzeichnis erstellen ermöglicht – ähnlich einer erweiterten FTP-Sitzung, aber vollständig sicher.

SFTP-Funktionen und -Merkmale

  1. Interaktive Sitzung: Übertragungen finden innerhalb einer dedizierten, interaktiven Shell-Sitzung statt.
  2. Robustheit: Unterstützt das Suchen, Fortsetzen und Verwalten einzelner Übertragungen innerhalb der Sitzung.
  3. Vollständige Verwaltung: Ermöglicht das Auflisten (ls), Wechseln von Verzeichnissen (cd) und Manipulieren von Remote- und lokalen Dateien mithilfe von Sitzungsbefehlen (put, get, lcd, lmkdir).
  4. Sicherheit: Hochzuverlässig und gilt als Standard für moderne sichere Dateiübertragungen.

Praktische SFTP-Befehle

1. Initiieren einer SFTP-Verbindung

Starten Sie eine interaktive Sitzung zum Remote-Server:

sftp user@remote_host

Bei Verwendung eines bestimmten Ports:

sftp -P 2222 user@remote_host

2. Interaktive SFTP-Befehle

Nach dem Verbinden arbeiten Sie standardmäßig in der Remote-Umgebung. Verwenden Sie Befehle, um Übertragungen und Verzeichnisse zu verwalten:

Befehl Beschreibung Beispiel
ls Remote-Dateien auflisten ls -l
cd Remote-Verzeichnis wechseln cd /var/www/html
put Datei hochladen (Lokal nach Remote) put local_data.zip
get Datei herunterladen (Remote nach Lokal) get server_backup.tar.gz
lcd Lokales Verzeichnis wechseln lcd /Users/me/downloads
lpwd Lokales Arbeitsverzeichnis ausgeben lpwd
mkdir Remote-Verzeichnis erstellen mkdir new_project
quit SFTP-Sitzung beenden quit

Beispiel: Hoch- und Herunterladen innerhalb einer SFTP-Sitzung

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

SCP vs. SFTP: Das richtige Werkzeug wählen

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

Funktion Secure Copy Protocol (SCP) SSH File Transfer Protocol (SFTP)
Mechanismus Einfaches Kopierprotokoll (Nicht-Interaktiv) Interaktives Dateiverwaltungsprotokoll (Zustandsbehaftet)
Anwendungsfall Schnelle, einzelne Dateiübertragungen; Skripting/Automatisierung. Komplexe Übertragungen; Verzeichnisverwaltung; interaktive Sitzungen.
Geschwindigkeit Im Allgemeinen schneller aufgrund geringerer Overhead. Etwas langsamer aufgrund interaktiver Handshakes.
Fortsetzung Schlecht unterstützt oder nicht existent. Unterstützt vollständig die Fortsetzung und das Suchen von Übertragungen.
Sicherheitsstatus Legacy (Einige Protokollschwachstellen). Moderner, robuster Standard.

Wann SCP verwenden: Verwenden Sie SCP, wenn Sie maximale Geschwindigkeit für eine einfache Dateiübertragung benötigen und den Befehl innerhalb eines Skripts ausführen, wo Nicht-Interaktivität bevorzugt wird.

Wann SFTP verwenden: 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 Remote-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 eines Passwort-Kompromisses bei automatisierten oder manuellen Übertragungen.

Schlüssel generieren (falls erforderlich):

ssh-keygen -t rsa -b 4096

Einen bestimmten Schlüssel für die Übertragung verwenden:

scp -i ~/.ssh/my_transfer_key file.txt user@remote_host:/tmp/
# oder
sftp -i ~/.ssh/my_transfer_key user@remote_host

2. Root-Login deaktivieren

Erlauben Sie niemals direkte Dateiübertragungen mit dem root-Benutzer. Übertragungen sollten immer von einem dedizierten Benutzerkonto mit geringen Berechtigungen durchgeführt werden. Wenn Administratorzugriff benötigt wird, können Dateien nach der Übertragung lokal auf dem Remote-Rechner mithilfe von sudo an den entsprechenden Ort verschoben werden.

3. Zugriff mit ChrootDirectory einschränken (SFTP)

Für Systeme, die externen oder nicht vertrauenswürdigen Benutzern SFTP-Zugriff bieten, implementieren Sie ChrootDirectory-Einschränkungen in der sshd_config-Datei. Dies sperrt den SFTP-Benutzer in ein bestimmtes Verzeichnis und verhindert, dass er den Rest des Dateisystems durchsucht.

Beispiel für ein Konfigurationsfragment in /etc/ssh/sshd_config:

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

4. Berechtigungen begrenzen

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

Fazit

SSH bietet die wesentliche Sicherheitsebene, die für vertrauenswürdige Remote-Operationen erforderlich ist. Während SCP eine schnelle und unkomplizierte Option für skriptgesteuerte Kopien bleibt, bietet SFTP den überlegenen Funktionsumfang, die interaktive Steuerung und die moderne Robustheit, die für eine umfassende Dateiverwaltung erforderlich sind. Durch die Nutzung der schlüsselbasierten Authentifizierung und der richtigen serverseitigen Konfiguration können Systemadministratoren sicherstellen, dass ihre Dateiübertragungen nicht nur funktional, sondern auch vollständig sicher sind.