Erfahren Sie, wie Sie SCP-Befehle unter Linux sicher nutzen, Dateien schnell zwischen Servern kopieren und typische Fehler beim Secure Copy vermeiden.

Mit dem SCP-Befehl (Secure Copy Protocol) übertragen Sie Dateien sicher zwischen Computern über eine verschlüsselte SSH-Verbindung. Der scp-Befehl ist unter Linux fest integriert und funktioniert ohne zusätzliche Software.
Dieser Artikel erklärt die vollständige Syntax, alle wichtigen Optionen sowie empfohlene Vorgehensweisen – damit Sie Dateien schnell, sicher und fehlerfrei von einem Linux-System auf ein anderes übertragen.
Was ist SCP und warum sollten Sie es verwenden?
SCP steht für „Secure Copy Protocol“ und ist ein Kommandozeilenwerkzeug, das auf dem SSH-Protokoll (Secure Shell) basiert. Deshalb sind alle übertragenen Daten während des Transports vollständig verschlüsselt. Im Gegensatz zu älteren Protokollen wie FTP oder dem veralteten rcp-Befehl bietet SCP also einen zuverlässigen Schutz gegen das Abfangen von Daten im Netzwerk.
Zudem ist scp auf nahezu jedem Linux-System standardmäßig vorinstalliert, da es Bestandteil des OpenSSH-Pakets ist. Dadurch entfällt der Aufwand für die Installation und Konfiguration zusätzlicher Programme. Besonders für Systemadministratoren und Entwickler, die regelmäßig mit entfernten Servern arbeiten, ist scp deshalb ein unverzichtbares Werkzeug im täglichen Einsatz.
Ein weiterer Vorteil: Da SCP auf SSH aufbaut, können Sie dieselben Authentifizierungsmethoden verwenden wie bei einer regulären SSH-Verbindung. Das bedeutet, sowohl Passwörter als auch SSH-Schlüsselpaare funktionieren problemlos, ohne dass Sie zusätzliche Konfigurationen vornehmen müssen.
Wann ist SCP die richtige Wahl?
SCP eignet sich hervorragend für folgende Anwendungsfälle:
- Einzelne Dateien zwischen dem lokalen Rechner und einem Remote-Server übertragen
- Ganze Verzeichnisse rekursiv kopieren
- Dateien direkt zwischen zwei Remote-Servern verschieben
- Skripte und Automatisierungen, bei denen keine interaktive Verbindung notwendig ist
- Konfigurationsdateien schnell auf mehrere Server verteilen
Allerdings sollten Sie beachten: Für sehr große Datenmengen oder komplexe Synchronisierungsaufgaben empfehlen sich alternativ Tools wie rsync, da dieses Programm inkrementelle Übertragungen unterstützt und somit Bandbreite spart. Ebenso ist rsync besser geeignet, wenn Sie unterbrochene Übertragungen fortsetzen möchten.
Verfügbarkeit unter verschiedenen Linux-Distributionen
Da scp Teil von OpenSSH ist, steht es unter allen gängigen Linux-Distributionen zur Verfügung. Unter Ubuntu und Debian ist es im Paket openssh-client enthalten. Falls Sie es ausnahmsweise installieren müssen, geht das folgendermaßen:
# Ubuntu/Debian
sudo apt update && sudo apt install openssh-client
# CentOS/RHEL/Fedora
sudo dnf install openssh-clients
# Arch Linux
sudo pacman -S openssh
Anschließend steht der scp-Befehl sofort zur Verfügung. Zur Prüfung der installierten Version führen Sie aus:
scp -V
Die grundlegende SCP-Syntax verstehen
Bevor Sie mit konkreten Beispielen arbeiten, sollten Sie die allgemeine Struktur des scp-Befehls genau kennen. Die Grundsyntax lautet wie folgt:
scp Quelle Ziel
Dabei gilt: Sowohl Quelle als auch Ziel können entweder lokal oder remote sein. Ein Remote-Pfad hat stets folgendes Format:
benutzername@hostname:/pfad/zur/datei
Außerdem ist es wichtig zu verstehen, dass scp intern eine SSH-Verbindung aufbaut. Deshalb gelten dieselben Authentifizierungsregeln wie bei SSH – also entweder ein Passwort oder ein SSH-Schlüsselpaar. Haben Sie bereits eine funktionierende SSH-Verbindung zu einem Server eingerichtet, funktioniert scp mit demselben Server sofort ohne weitere Konfiguration.
Bei der Angabe von Pfaden ist Folgendes zu beachten:
- Absolute Pfade beginnen mit einem Schrägstrich, z. B.
/var/www/html/index.html - Relative Pfade auf dem Remote-Server beginnen ohne Schrägstrich und beziehen sich auf das Home-Verzeichnis des Benutzers, z. B.
benutzer@server:dokumente/datei.txt - Tilde (~) kann für das Home-Verzeichnis verwendet werden, z. B.
benutzer@server:~/datei.txt
Diese Unterscheidung ist wichtig, denn falsche Pfadangaben führen häufig zu dem Fehler „No such file or directory“, obwohl der Befehl syntaktisch korrekt ist.
Dateien vom lokalen System auf einen Remote-Server kopieren
Das häufigste Szenario ist das Hochladen einer Datei auf einen entfernten Server. Dazu verwenden Sie den Befehl in folgender Form:
scp /lokaler/pfad/datei.txt benutzer@server.example.com:/remote/zielverzeichnis/
Konkretes Beispiel: Sie möchten die Datei backup.sql aus Ihrem Home-Verzeichnis auf den Server 192.168.1.100 in das Verzeichnis /var/backups/ übertragen:
scp ~/backup.sql admin@192.168.1.100:/var/backups/
Daraufhin werden Sie nach dem Passwort des Benutzers admin gefragt – sofern kein SSH-Schlüssel hinterlegt ist. Nach der Eingabe beginnt die Übertragung sofort, und der Fortschritt wird im Terminal mit Prozentangabe und aktueller Übertragungsrate angezeigt.
Zusätzlich können Sie beim Kopieren direkt einen neuen Dateinamen auf dem Zielserver vergeben:
scp ~/backup.sql admin@192.168.1.100:/var/backups/backup_2026-03-09.sql
Möchten Sie mehrere einzelne Dateien gleichzeitig hochladen, trennen Sie die Quelldateien durch Leerzeichen:
scp datei1.txt datei2.conf datei3.sh benutzer@server.example.com:/ziel/
Außerdem können Sie Wildcards verwenden, um mehrere Dateien mit einem Muster auszuwählen:
scp ~/logs/*.log benutzer@server.example.com:/remote/logs/
Dieser Befehl lädt alle Dateien mit der Endung .log aus dem lokalen Verzeichnis ~/logs/ auf den Server hoch.
Dateien von einem Remote-Server auf das lokale System herunterladen
Ebenso einfach funktioniert das Herunterladen. Dabei tauschen Sie lediglich Quelle und Ziel:
scp benutzer@server.example.com:/remote/pfad/datei.txt /lokales/zielverzeichnis/
Konkretes Beispiel: Sie möchten die Logdatei /var/log/nginx/access.log vom Server meinserver.de in Ihr lokales Verzeichnis ~/Downloads/ kopieren:
scp webmaster@meinserver.de:/var/log/nginx/access.log ~/Downloads/
Zudem können Sie mehrere Dateien gleichzeitig herunterladen, indem Sie die Quellpfade durch Leerzeichen trennen:
scp webmaster@meinserver.de:/var/log/nginx/access.log webmaster@meinserver.de:/var/log/nginx/error.log ~/Downloads/
Wenn Sie hingegen alle Dateien eines bestimmten Typs herunterladen möchten, verwenden Sie Wildcards. Jedoch müssen Sie in diesem Fall den Pfad in einfache Anführungszeichen setzen, damit die Shell die Wildcards nicht lokal auswertet, sondern an den Remote-Server weitergibt:
scp 'webmaster@meinserver.de:/var/log/nginx/*.log' ~/Downloads/
Dateien zwischen zwei Remote-Servern übertragen
Weniger bekannt, aber äußerst praktisch: Mit scp können Sie Dateien direkt zwischen zwei entfernten Servern kopieren, ohne die Datei zuvor auf Ihren lokalen Rechner herunterladen zu müssen. Dabei fungiert Ihr lokaler Rechner lediglich als Vermittler für den Verbindungsaufbau:
scp benutzer1@server1.example.com:/pfad/datei.txt benutzer2@server2.example.com:/zielpfad/
Konkretes Beispiel: Sie übertragen ein Datenbank-Dump direkt vom Produktionsserver prod.meinefirma.de auf den Backup-Server backup.meinefirma.de:
scp deploy@prod.meinefirma.de:/var/db/dump.sql backup@backup.meinefirma.de:/backups/
Wichtig dabei: Beide Server müssen per SSH erreichbar sein, und Sie benötigen die entsprechenden Zugangsdaten für jeden Server. Außerdem sollten Sie wissen, dass bei dieser Methode die Daten tatsächlich über Ihren lokalen Rechner geleitet werden. Für besonders große Übertragungen zwischen Servern im selben Rechenzentrum ist es deshalb effizienter, sich direkt per SSH auf einem der Server anzumelden und die Übertragung von dort aus zu starten.
Verzeichnisse rekursiv kopieren mit der Option -r
Standardmäßig kopiert scp nur einzelne Dateien. Um ein gesamtes Verzeichnis inklusive aller Unterverzeichnisse und Dateien zu übertragen, verwenden Sie die Option -r (recursive):
scp -r /lokales/verzeichnis/ benutzer@server.example.com:/remote/ziel/
Konkretes Beispiel: Sie möchten das gesamte Projektverzeichnis ~/meinprojekt/ auf den Entwicklungsserver hochladen:
scp -r ~/meinprojekt/ dev@entwicklung.example.com:/var/www/html/
Beachten Sie dabei: Der Schrägstrich am Ende des Quellpfads beeinflusst, ob der Verzeichnisname selbst oder nur der Inhalt kopiert wird. Deshalb empfiehlt sich, die Pfade immer sorgfältig zu prüfen, bevor Sie den Befehl ausführen. Im Zweifel testen Sie zunächst mit der Option -v (verbose), die eine ausführliche Ausgabe erzeugt und Ihnen zeigt, welche Dateien tatsächlich übertragen werden.
Zusätzlich können Sie symbolische Links mit -L steuern: Standardmäßig werden Symlinks als solche kopiert. Mit -L hingegen folgt scp den Symlinks und kopiert die verknüpften Dateien direkt, was in manchen Szenarien erwünscht ist.
Die wichtigsten SCP-Optionen im Überblick
Neben der rekursiven Option bietet scp zahlreiche weitere nützliche Parameter. Deshalb lohnt es sich, diese Optionen gut zu kennen und situationsgerecht einzusetzen.
Option -P: Anderen SSH-Port verwenden
Läuft der SSH-Dienst auf dem Remote-Server nicht auf dem Standardport 22, geben Sie den Port mit -P an:
scp -P 2222 datei.txt benutzer@server.example.com:/ziel/
Beachten Sie dabei: Bei scp wird der Port mit einem großen „P“ angegeben, während ssh selbst ein kleines „p“ verwendet. Das ist ein häufiger Stolperstein, wenn man zwischen den beiden Befehlen wechselt.
Option -i: Einen bestimmten SSH-Schlüssel angeben
Wenn Sie mehrere SSH-Schlüssel verwalten, können Sie mit -i einen spezifischen privaten Schlüssel angeben:
scp -i ~/.ssh/mein_schluessel datei.txt benutzer@server.example.com:/ziel/
Dadurch umgehen Sie die automatische Schlüsselauswahl des SSH-Agenten und haben vollständige Kontrolle darüber, welcher Schlüssel für die Verbindung genutzt wird. Das ist besonders praktisch, wenn Sie verschiedene Schlüssel für verschiedene Server oder Projekte verwenden.
Option -C: Komprimierung aktivieren
Mit -C aktivieren Sie die Datenkomprimierung während der Übertragung. Besonders bei langsamen Verbindungen oder großen Textdateien, Konfigurationsdateien und Log-Dateien reduziert das die Übertragungszeit erheblich:
scp -C große_textdatei.log benutzer@server.example.com:/backup/
Allerdings sollten Sie wissen: Bei bereits komprimierten Dateien (z. B. .zip, .gz, .tar.gz, .jpg) bringt diese Option keinen nennenswerten Vorteil, da sich diese Formate nicht weiter komprimieren lassen. Zudem erhöht die Option in solchen Fällen die CPU-Last unnötig.
Option -v: Ausführliche Ausgabe für die Fehlersuche
Die Option -v (verbose) gibt detaillierte Informationen über den Verbindungsaufbau und die Übertragung aus. Deshalb ist sie besonders hilfreich, wenn scp unerwartet fehlschlägt:
scp -v datei.txt benutzer@server.example.com:/ziel/
Zudem können Sie -vv oder -vvv für noch ausführlichere Debug-Ausgaben verwenden. Diese Informationen helfen dabei, Probleme mit SSH-Schlüsseln, Firewall-Einstellungen oder Konfigurationsfehlern schnell zu lokalisieren.
Option -l: Bandbreite begrenzen
Um die Netzwerkauslastung zu kontrollieren, begrenzen Sie mit -l die Übertragungsgeschwindigkeit in Kbit/s:
scp -l 1000 große_datei.iso benutzer@server.example.com:/ziel/
Dieser Befehl begrenzt die Übertragungsrate auf 1.000 Kbit/s, also etwa 125 KB/s. Das ist besonders sinnvoll in produktiven Umgebungen, in denen Sie die Netzwerkbandbreite nicht monopolisieren möchten, weil andere Dienste und Benutzer gleichzeitig auf das Netzwerk angewiesen sind.
Option -q: Stille Übertragung ohne Fortschrittsanzeige
Für Skripte und automatisierte Prozesse empfiehlt sich die Option -q (quiet), die alle Ausgaben unterdrückt:
scp -q datei.txt benutzer@server.example.com:/ziel/
Dadurch wird nur im Fehlerfall eine Ausgabe erzeugt, was die Auswertung in Skripten erheblich vereinfacht. Außerdem vermeiden Sie damit unnötige Log-Einträge in Cron-Job-Protokollen, die sonst schnell unübersichtlich werden.
Option -o: SSH-Einstellungen direkt übergeben
Mit -o können Sie beliebige SSH-Konfigurationsoptionen direkt an scp übergeben. Das ist äußerst flexibel und vermeidet die Notwendigkeit, die ~/.ssh/config dauerhaft zu ändern:
scp -o "ConnectTimeout=10" datei.txt benutzer@server.example.com:/ziel/
Dieser Befehl bricht den Verbindungsversuch nach 10 Sekunden ab, wenn der Server nicht antwortet. Zudem können Sie damit nützliche Keepalive-Einstellungen übergeben:
scp -o "ServerAliveInterval=60" -o "ServerAliveCountMax=3" datei.tar benutzer@server.example.com:/backup/
Achtung: Die Option StrictHostKeyChecking=no sollten Sie nur in gesicherten Testumgebungen verwenden, da sie die Überprüfung des Server-Fingerabdrucks deaktiviert und damit Sicherheitsrisiken birgt.
Optionen kombinieren
Selbstverständlich lassen sich mehrere Optionen kombinieren. So übertragen Sie beispielsweise ein Verzeichnis rekursiv, mit Komprimierung und über einen bestimmten Port:
scp -r -C -P 2222 ~/meinprojekt/ benutzer@server.example.com:/var/www/
Oder in Kurzform zusammengefasst:
scp -rCP 2222 ~/meinprojekt/ benutzer@server.example.com:/var/www/
Authentifizierung mit SSH-Schlüsseln einrichten
Für regelmäßige Dateiübertragungen empfehlen wir ausdrücklich, die Authentifizierung mit einem SSH-Schlüsselpaar einzurichten – statt jedes Mal ein Passwort einzugeben. Das ist nicht nur bequemer, sondern auch erheblich sicherer, da Passwörter durch Brute-Force-Angriffe kompromittiert werden können, während SSH-Schlüssel ohne den zugehörigen privaten Schlüssel praktisch unknackbar sind.
Schritt 1: SSH-Schlüsselpaar generieren
Öffnen Sie ein Terminal und führen Sie folgenden Befehl aus:
ssh-keygen -t ed25519 -C "mein-server-schluessel"
Dabei ist ED25519 der aktuell empfohlene Algorithmus für neue SSH-Schlüssel, da er sehr sicher und gleichzeitig performant ist. Alternativ können Sie RSA mit einer Schlüssellänge von mindestens 4096 Bit verwenden:
ssh-keygen -t rsa -b 4096 -C "mein-server-schluessel"
Sie werden nach einem Speicherort gefragt (Standard: ~/.ssh/id_ed25519) und optional nach einer Passphrase. Eine Passphrase schützt Ihren privaten Schlüssel zusätzlich – falls jemand Zugriff auf Ihr Dateisystem erhält, kann er den Schlüssel ohne die Passphrase dennoch nicht verwenden.
Schritt 2: Öffentlichen Schlüssel auf den Server übertragen
Anschließend kopieren Sie den öffentlichen Schlüssel mit folgendem Befehl auf den Zielserver:
ssh-copy-id -i ~/.ssh/id_ed25519.pub benutzer@server.example.com
Daraufhin wird der Schlüssel automatisch in die Datei ~/.ssh/authorized_keys auf dem Server eingetragen. Falls ssh-copy-id nicht verfügbar ist, können Sie alternativ folgenden Befehl verwenden:
cat ~/.ssh/id_ed25519.pub | ssh benutzer@server.example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Schritt 3: Verbindung testen
Testen Sie die Verbindung anschließend mit:
ssh benutzer@server.example.com
Funktioniert die Anmeldung ohne Passwortabfrage, sind ab sofort auch alle scp-Befehle ohne manuelle Passworteingabe möglich. Außerdem funktioniert die schlüsselbasierte Authentifizierung hervorragend für automatisierte Skripte und Cron-Jobs, bei denen eine interaktive Passworteingabe nicht möglich wäre.
SCP mit SSH-Konfigurationsdatei vereinfachen
Wenn Sie regelmäßig mit denselben Servern arbeiten, lohnt sich die Pflege einer SSH-Konfigurationsdatei (~/.ssh/config). Dadurch können Sie lange scp-Befehle mit ausführlichen Parametern erheblich verkürzen und gleichzeitig die gesamte Verbindungskonfiguration zentral an einem Ort verwalten.
Öffnen Sie die Datei mit einem Texteditor. Wir empfehlen nano für Einsteiger, da es einfach zu bedienen ist:
nano ~/.ssh/config
Fügen Sie dann für jeden Server einen Eintrag hinzu:
Host webserver
HostName server.example.com
User admin
Port 22
IdentityFile ~/.ssh/id_ed25519
Host backupserver
HostName backup.example.com
User backup
Port 2222
IdentityFile ~/.ssh/backup_schluessel
Danach verwenden Sie einfach den kurzen Aliasnamen statt der vollständigen Adresse:
# Statt des langen Befehls:
scp -P 22 -i ~/.ssh/id_ed25519 datei.txt admin@server.example.com:/ziel/
# Jetzt einfach:
scp datei.txt webserver:/ziel/
Außerdem funktioniert diese Konfiguration genauso für den ssh-Befehl selbst – ein klarer Vorteil, da Sie alle Verbindungsparameter nur einmal definieren müssen. Stellen Sie sicher, dass die Konfigurationsdatei die richtigen Berechtigungen hat, damit SSH sie akzeptiert:
chmod 600 ~/.ssh/config
Häufige Fehler bei SCP und wie Sie sie beheben
Trotz der einfachen Handhabung treten bei scp gelegentlich Fehler auf. Deshalb ist es hilfreich, die häufigsten Probleme und deren Lösungen zu kennen.
Fehler: „Permission denied (publickey)“
Dieser Fehler tritt auf, wenn die Schlüsselauthentifizierung fehlschlägt. Überprüfen Sie deshalb: Existiert der öffentliche Schlüssel in ~/.ssh/authorized_keys auf dem Server? Hat die Datei authorized_keys die Berechtigung 600? Hat das Verzeichnis ~/.ssh die Berechtigung 700? Korrigieren Sie die Berechtigungen mit:
ssh benutzer@server "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
Fehler: „Permission denied“ beim Schreiben
Dieser Fehler bedeutet, dass der angegebene Benutzer keine Schreibberechtigung im Zielverzeichnis hat. Prüfen Sie deshalb zunächst die Berechtigungen auf dem Remote-Server:
ssh benutzer@server.example.com "ls -la /zielverzeichnis/"
Gegebenenfalls passen Sie die Berechtigungen mit chmod oder chown an – sofern Sie dazu berechtigt sind.
Fehler: „Host key verification failed“
Dieser Fehler erscheint, wenn sich der Fingerabdruck des Servers geändert hat. Das kann auf einen Serveraustausch, eine Neuinstallation oder in seltenen Fällen auf einen Man-in-the-Middle-Angriff hinweisen. Überprüfen Sie deshalb beim Serveranbieter, ob die Änderung erwartet war. Falls ja, entfernen Sie den alten Eintrag aus Ihrer ~/.ssh/known_hosts:
ssh-keygen -R server.example.com
Anschließend verbinden Sie sich erneut und bestätigen den neuen Fingerabdruck.
Fehler: „No such file or directory“
Überprüfen Sie den angegebenen Pfad sorgfältig. Besonders bei Remote-Pfaden passiert es leicht, dass ein Tippfehler oder ein fehlender Schrägstrich den Fehler verursacht. Außerdem muss das Zielverzeichnis auf dem Remote-Server bereits existieren – scp erstellt es nicht automatisch. Erstellen Sie es bei Bedarf vorab:
ssh benutzer@server.example.com "mkdir -p /pfad/zum/neuen/verzeichnis/"
Verbindung bricht bei großen Dateien ab
Bei instabilen Verbindungen oder sehr langen Übertragungen hilft es, scp mit Keepalive-Optionen zu starten:
scp -o "ServerAliveInterval=60" -o "ServerAliveCountMax=5" große_datei.tar benutzer@server.example.com:/backup/
Dadurch sendet der Client alle 60 Sekunden ein Keepalive-Signal an den Server. Die Verbindung wird erst nach fünf unbeantworteten Nachrichten beendet.
Empfohlene Vorgehensweisen für SCP im Produktivbetrieb
Für den professionellen Einsatz von scp sollten Sie folgende Punkte konsequent beachten:
Verwenden Sie stets SSH-Schlüssel anstelle von Passwörtern. Dadurch erhöhen Sie die Sicherheit erheblich und ermöglichen gleichzeitig die Automatisierung von Übertragungen in Skripten und Cron-Jobs, ohne Passwörter im Klartext hinterlegen zu müssen.
Prüfen Sie die Dateiintegrität nach wichtigen Übertragungen. Dazu vergleichen Sie auf dem Quellsystem und auf dem Zielsystem die Prüfsumme mit sha256sum:
# Auf dem Quellsystem:
sha256sum wichtige_datei.tar.gz
# Auf dem Zielsystem:
ssh benutzer@server "sha256sum /ziel/wichtige_datei.tar.gz"
Stimmen beide Prüfsummen überein, ist die Übertragung fehlerfrei abgeschlossen.
Nutzen Sie die Option -l zur Bandbreitenbegrenzung, wenn Sie in produktiven Umgebungen große Dateien übertragen. So vermeiden Sie Engpässe im Netzwerk und beeinträchtigen andere Dienste sowie Benutzer nicht.
Setzen Sie auf rsync für regelmäßige Synchronisierungen großer Datenmengen. Zwar ist scp ideal für einmalige Übertragungen, jedoch bietet rsync durch sein inkrementelles Verfahren deutliche Vorteile bei wiederkehrenden Aufgaben. Außerdem unterstützt rsync das Fortsetzen unterbrochener Übertragungen, was bei größeren Dateien besonders wertvoll ist.
Loggen Sie automatisierte Übertragungen konsequent in Skripten. Dadurch behalten Sie den Überblick und können Fehler schnell nachvollziehen:
scp datei.txt benutzer@server:/ziel/ && echo "$(date): Transfer erfolgreich" >> /var/log/transfers.log
Testen Sie Verbindungen vorab mit einem einfachen ssh-Befehl, bevor Sie größere scp-Übertragungen starten. Das spart Zeit und verhindert Frustration bei unerwartet auftretenden Verbindungsproblemen.
SCP in Shell-Skripten automatisieren
Ein großer Vorteil von scp ist die einfache Integration in Bash-Skripte. Dadurch können Sie Dateiübertragungen vollständig automatisieren und regelmäßig über Cron-Jobs ausführen lassen. Folgendes Beispiel zeigt ein praxistaugliches Backup-Skript:
#!/bin/bash
# Tägliches Backup auf Remote-Server
DATUM=$(date +%Y-%m-%d)
QUELLE="/var/www/html/"
ZIEL_SERVER="backup@backupserver.example.com"
ZIEL_PFAD="/backups/web_${DATUM}/"
SSH_KEY="/home/admin/.ssh/backup_schluessel"
# Zielverzeichnis erstellen
ssh -i "${SSH_KEY}" "${ZIEL_SERVER}" "mkdir -p ${ZIEL_PFAD}"
# Dateien übertragen
scp -r -q -i "${SSH_KEY}" "${QUELLE}" "${ZIEL_SERVER}:${ZIEL_PFAD}"
# Ergebnis prüfen
if ; then
echo "$(date): Backup erfolgreich abgeschlossen"
else
echo "$(date): FEHLER – Backup fehlgeschlagen!" >&2
exit 1
fi
Speichern Sie dieses Skript als backup.sh, machen Sie es anschließend ausführbar und fügen Sie es als Cron-Job ein:
chmod +x /home/admin/backup.sh
# Crontab öffnen und Eintrag hinzufügen:
crontab -e
# Täglich um 2:00 Uhr morgens ausführen:
0 2 * * * /home/admin/backup.sh >> /var/log/backup.log 2>&1
Dadurch läuft das Backup täglich automatisch ab – zuverlässig und ohne manuellen Eingriff.
SCP vs. rsync vs. SFTP: Wann welches Tool?
Häufig stellt sich die Frage, wann scp, rsync oder sftp die bessere Wahl ist. Deshalb hier ein direkter Vergleich der drei Werkzeuge:
SCP ist die richtige Wahl für schnelle, einmalige Dateiübertragungen. Es ist einfach zu verwenden und auf jedem Linux-System vorhanden. Allerdings bietet es keine Möglichkeit, Übertragungen fortzusetzen oder nur geänderte Dateien zu synchronisieren.
rsync hingegen eignet sich hervorragend für regelmäßige Backups und Synchronisierungen. Es überträgt nämlich nur veränderte Datenblöcke, spart dadurch Bandbreite und Zeit. Zudem unterstützt rsync das Fortsetzen unterbrochener Übertragungen. Empfehlenswert ist folgender Befehl für ein Backup mit rsync über SSH:
rsync -avz --progress -e "ssh -i ~/.ssh/mein_schluessel" /quelle/ benutzer@server:/ziel/
SFTP (SSH File Transfer Protocol) bietet eine interaktive Dateiverwaltung ähnlich wie FTP, jedoch vollständig verschlüsselt. Es eignet sich besonders dann, wenn Sie Verzeichnisse auf dem Remote-Server erkunden, Dateien umbenennen oder mehrere Aktionen interaktiv durchführen möchten. Den SFTP-Client starten Sie mit:
sftp benutzer@server.example.com
Anschließend navigieren Sie interaktiv mit Befehlen wie ls, cd, get, put und quit.
Hinweis zu SCP und modernen OpenSSH-Versionen
Ab OpenSSH 9.0 (veröffentlicht 2022) ist das veraltete SCP-Protokoll im Hintergrund standardmäßig durch das modernere SFTP-Protokoll ersetzt worden. Der scp-Befehl selbst bleibt dabei vollständig erhalten und funktioniert wie gewohnt – allerdings nutzt er intern nun SFTP für die eigentliche Datenübertragung. Deshalb müssen Sie Ihre bestehenden Skripte und Befehle grundsätzlich nicht ändern.
Falls Sie jedoch ausdrücklich das ältere SCP-Protokoll erzwingen möchten – etwa wegen der Kompatibilität mit sehr alten Systemen –, können Sie die Option -O (Legacy mode) verwenden:
scp -O datei.txt benutzer@server.example.com:/ziel/
In den meisten Fällen empfehlen wir jedoch, das Standardverhalten beizubehalten, da das SFTP-Protokoll robuster, zuverlässiger und bei der Übertragung großer Dateien effizienter ist. Außerdem profitieren Sie so automatisch von zukünftigen Verbesserungen der OpenSSH-Implementierung.
Häufige Fragen zu SCP-Befehlen
Wie kopiere ich eine Datei mit SCP auf einen Remote-Server?
Der grundlegende Befehl lautet: scp /lokaler/pfad/datei.txt benutzer@serveradresse:/zielpfad/. Ersetzen Sie dabei „benutzer“, „serveradresse“ und die Pfade durch Ihre tatsächlichen Angaben. Sie werden anschließend nach dem Passwort gefragt – sofern kein SSH-Schlüssel eingerichtet ist. Achten Sie darauf, dass das Zielverzeichnis auf dem Server bereits existiert, da scp es nicht automatisch anlegt.
Wie kopiere ich ein ganzes Verzeichnis mit SCP?
Verwenden Sie die Option -r (recursive): scp -r /lokales/verzeichnis/ benutzer@server:/ziel/. Diese Option weist scp an, alle Unterverzeichnisse und darin enthaltenen Dateien ebenfalls zu übertragen. Ohne diese Option bricht scp beim Antreffen eines Verzeichnisses mit einer Fehlermeldung ab.
Kann ich mit SCP einen anderen SSH-Port verwenden?
Ja, dazu dient die Option -P (mit großem P): scp -P 2222 datei.txt benutzer@server:/ziel/. Geben Sie nach -P die Portnummer an, auf der SSH auf dem Remote-Server lauscht. Beachten Sie unbedingt das Großbuchstaben-P, da dies ein häufiger Verwechslungsfehler beim Umstieg von ssh auf scp ist.
Wie überprüfe ich den Fortschritt einer SCP-Übertragung?
Standardmäßig zeigt scp bereits eine Fortschrittsanzeige mit Prozentangabe und Übertragungsgeschwindigkeit an. Zusätzlich können Sie mit -v eine ausführliche Verbindungsausgabe aktivieren. Für ein noch detaillierteres Debugging stehen -vv und -vvv zur Verfügung, die immer mehr Informationen über die SSH-Verbindung ausgeben.
Warum schlägt meine SCP-Verbindung mit „Permission denied“ fehl?
Dieser Fehler bedeutet entweder, dass die Anmeldedaten falsch sind, oder dass der Benutzer keine Schreibberechtigung im Zielverzeichnis hat. Prüfen Sie zuerst, ob die SSH-Anmeldung mit ssh benutzer@server funktioniert, und überprüfen Sie anschließend die Verzeichnisberechtigungen auf dem Remote-Server mit ls -la /zielpfad/.
Wie kopiere ich Dateien zwischen zwei Remote-Servern mit SCP?
Das ist mit folgendem Befehl möglich: scp benutzer1@server1:/quellpfad/datei.txt benutzer2@server2:/zielpfad/. Dabei baut Ihr lokaler Rechner die SSH-Verbindungen zu beiden Servern auf. Beide Server müssen erreichbar sein, und Sie benötigen die jeweiligen Zugangsdaten.
Kann SCP eine unterbrochene Übertragung fortsetzen?
Nein, scp unterstützt kein Fortsetzen unterbrochener Übertragungen. Deshalb empfehlen wir für große Dateien oder instabile Verbindungen den Einsatz von rsync mit der Option -P: rsync -avP -e ssh datei.tar benutzer@server:/ziel/. Die Option -P zeigt den Fortschritt an und ermöglicht das Fortsetzen einer unterbrochenen Übertragung.
Wie schütze ich SCP-Übertragungen mit einem SSH-Schlüssel?
Generieren Sie zunächst ein Schlüsselpaar mit ssh-keygen -t ed25519, kopieren Sie den öffentlichen Schlüssel mit ssh-copy-id benutzer@server auf den Zielserver und verwenden Sie bei Bedarf die Option -i ~/.ssh/ihr_schluessel beim scp-Befehl. Nach der Einrichtung entfällt die Passwortabfrage vollständig, was sowohl bequemer als auch sicherer ist.
Wie begrenze ich die Übertragungsgeschwindigkeit bei SCP?
Verwenden Sie die Option -l gefolgt von der gewünschten Bandbreite in Kbit/s: scp -l 500 datei.tar benutzer@server:/ziel/. Dieser Befehl begrenzt die Übertragung auf 500 Kbit/s, also rund 62,5 KB/s. Das ist besonders sinnvoll auf produktiven Servern, wo Sie andere Dienste und Netzwerknutzer nicht beeinträchtigen möchten.
Ist SCP sicher genug für sensible Daten im Unternehmen?
Ja, da scp das SSH-Protokoll zur Verschlüsselung nutzt und dadurch alle übertragenen Daten sowie Anmeldeinformationen zuverlässig schützt. Zusätzlich empfehlen wir für maximale Sicherheit: SSH-Schlüssel statt Passwörter verwenden, aktuelle OpenSSH-Versionen einspielen und ED25519-Schlüssel als Authentifizierungsmethode nutzen.
Was ist der Unterschied zwischen SCP und SFTP?
Beide Protokolle nutzen SSH zur Verschlüsselung und sind somit gleich sicher. Jedoch unterscheiden sie sich in der Bedienung: SCP ist ein reiner Kopierbefehl, der sich ideal für Skripte eignet. SFTP hingegen bietet eine interaktive Sitzung, in der Sie navigieren, Verzeichnisse erstellen, Dateien umbenennen und vieles mehr tun können – ähnlich wie bei einer FTP-Verbindung, jedoch verschlüsselt.
Fazit
Der scp-Befehl ist ein bewährtes, zuverlässiges Werkzeug für sichere Dateiübertragungen unter Linux. Mit der richtigen Kenntnis der Optionen und dem Einsatz von SSH-Schlüsseln meistern Sie sowohl einfache Einzelübertragungen als auch vollständig automatisierte Backup-Prozesse mühelos.
Für einmalige Transfers bleibt scp die erste Wahl – schnell, sicher und ohne Konfigurationsaufwand. Für regelmäßige Synchronisierungen großer Datenmengen ergänzen Sie Ihr Repertoire sinnvoll durch rsync.
