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
- Einfachheit: Verwendet eine Syntax, die dem Standard-Unix-Befehl
cpsehr ähnlich ist. - 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.
- 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
- Interaktive Sitzung: Übertragungen finden innerhalb einer dedizierten, interaktiven Shell-Sitzung statt.
- Robustheit: Unterstützt Suchen, Fortsetzen und Verwalten einzelner Übertragungen innerhalb der Sitzung.
- 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). - 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.