Startseite » Blog » scp-Befehl unter Linux: Dateien zum VPS kopieren (rsync, sftp)
scp-Befehl unter Linux: Dateien zum VPS kopieren (rsync, sftp)
- 14. November 2026
- 09:00
- Von Adrien Roche
- Tutorials

Der scp-Befehl unter Linux: Syntax und die grundlegenden Transfers
scp (secure copy) kopiert Dateien zwischen Rechnern über SSH: Benutzer, Schlüssel und Port, die für ssh funktionieren, gelten auch für scp. Das Schema lautet immer scp [Optionen] QUELLE ZIEL, und die entfernte Seite wird als user@host:pfad geschrieben. Ein funktionierender SSH-Login ist Voraussetzung; antwortet Port 22 noch nicht, zuerst SSH unter Ubuntu aktivieren und absichern.
1. Lokal zum Server (Upload)
scp backup.tar.gz user@SERVER_IP:/home/user/
scp backup.tar.gz user@SERVER_IP:~/backups/renamed.tar.gz
scp *.conf user@SERVER_IP:~/nginx-conf/
Ein Pfad mit abschließendem Schrägstrich legt die Datei unter ihrem ursprünglichen Namen in diesem Verzeichnis ab; ein vollständiger Pfad benennt sie beim Ankommen um. Vor dem Ziel können mehrere lokale Dateien stehen, solange das Ziel ein Verzeichnis ist, und dieses Verzeichnis muss bereits existieren: scp legt keine übergeordneten Ordner an.
2. Server zu lokal (Download)
scp user@SERVER_IP:/var/log/nginx/access.log .
scp user@SERVER_IP:'/var/log/nginx/*.log' ./logs/
Der Punkt bedeutet „hierher, gleicher Name“. Setzen Sie entfernte Platzhalter in Anführungszeichen, damit Ihre lokale Shell sie nicht expandiert. Server zu Server geht ebenfalls: scp -3 user@HOST_A:/data/dump.sql user@HOST_B:/data/ leitet die Kopie über Ihren Rechner, sodass nur dieser Zugangsdaten für beide Server braucht.
3. Verzeichnisse mit -r
scp -r ./site user@SERVER_IP:/var/www/
scp -r user@SERVER_IP:/etc/nginx ./nginx-backup
-r kopiert ein Verzeichnis samt Inhalt. Der erste Befehl erzeugt /var/www/site auf dem Server; der zweite holt den kompletten nginx-Baum in einen lokalen Ordner. Symlinks werden als gewöhnliche Dateien kopiert, ein Grund, warum rsync für vollständige Systembäume das bessere Werkzeug ist.
scp-Optionen, die Sie wirklich brauchen: -P, -i, -C, -p
scp -P 2222 file.txt user@SERVER_IP:/home/user/ # non-default SSH port
scp -i ~/.ssh/id_ed25519 file.txt user@SERVER_IP:~/ # use a specific key
scp -C dump.sql user@SERVER_IP:~/ # compress in transit
scp -rp ./site user@SERVER_IP:/var/www/ # keep times and modes
Der Port-Schalter ist ein großes -P. Kleines -p steht für „Änderungs- und Zugriffszeiten sowie Rechte erhalten“, und da ssh selbst -p für den Port verwendet, ist die Verwechslung der häufigste scp-Fehler. Damit Sie Port und Schlüssel nicht bei jedem Aufruf wiederholen müssen, definieren Sie den Host einmalig in ~/.ssh/config; scp, rsync und sftp lesen sie alle:
Host vps
HostName SERVER_IP
User user
Port 2222
IdentityFile ~/.ssh/id_ed25519
Zwei weitere Schalter: -l 8000 begrenzt den Transfer auf 8.000 Kbit/s (etwa 1 MB/s), und -v zeigt bei fehlgeschlagener Authentifizierung, welche Schlüssel angeboten wurden. Seit OpenSSH 9.0 spricht scp im Hintergrund das SFTP-Protokoll; die Syntax bleibt gleich, aber Shell-Konstrukte in einem entfernten Pfad (etwa Kommandosubstitution) laufen nicht mehr auf dem Server, und -O stellt für sehr alte Server, die den neuen Modus ablehnen, das alte Protokoll wieder her.
rsync: Spiegelungen, fortsetzbare Transfers und Ausschlüsse
rsync kopiert nur das Geänderte. Der erste Lauf verhält sich wie scp -r; spätere Läufe vergleichen beide Seiten und übertragen nur die Unterschiede: neue Dateien und bei geänderten Dateien nur die betroffenen Blöcke. Damit ist es das Werkzeug für Deployments, Backups und alles Große. Es muss auf beiden Seiten installiert sein (sudo apt install rsync); manche Minimal-Images und Container bringen es nicht mit.
1. Der Alltagsbefehl
rsync -avz --progress ./site/ user@SERVER_IP:/var/www/site/
rsync -avz --progress user@SERVER_IP:/var/www/site/ ./site-backup/
-a (archive) entspricht -rlptgoD: rekursiv, Symlinks als Symlinks belassen, Rechte, Zeiten, Gruppe, Eigentümer und Gerätedateien erhalten; der Eigentümer bleibt nur erhalten, wenn die Gegenseite als root läuft. -v listet Dateien auf, -z komprimiert, --progress zeigt jede Datei an.
Der abschließende Schrägstrich ist entscheidend. ./site/ bedeutet „der Inhalt von site“; ./site bedeutet „das Verzeichnis selbst“, was /var/www/site/site erzeugen würde. Im Zweifel -n (--dry-run) ergänzen und die Dateiliste lesen, bevor irgendetwas geschrieben wird.
2. Spiegeln mit --delete
rsync -avzn --delete ./site/ user@SERVER_IP:/var/www/site/ # dry run first
rsync -avz --delete ./site/ user@SERVER_IP:/var/www/site/
--delete entfernt Zieldateien, die in der Quelle nicht mehr existieren. Eine echte Spiegelung braucht das — und genau das macht aus einem falschen Schrägstrich ein gelöschtes Verzeichnis. Testen Sie jeden neuen --delete-Befehl einmal als Probelauf.
3. Dateien ausschließen
rsync -avz --exclude='node_modules/' --exclude='.git/' --exclude='*.log' ./app/ user@SERVER_IP:/srv/app/
rsync -avz --exclude-from='.rsyncignore' ./app/ user@SERVER_IP:/srv/app/
Muster beziehen sich auf die Transferwurzel; ein führender Schrägstrich verankert sie, sodass /config.php nur die Datei auf oberster Ebene ausschließt. --exclude-from liest ein Muster pro Zeile.
4. Abgebrochenen Transfer fortsetzen, eigener Port und Schlüssel
rsync -avP -e 'ssh -p 2222 -i ~/.ssh/id_ed25519' ./disk.img user@SERVER_IP:/backup/
-P ist die Kurzform von --partial --progress: bricht die Verbindung ab, bleibt die unvollständige Datei erhalten, und derselbe Befehl setzt beim erneuten Aufruf an der Abbruchstelle fort. SSH-Optionen laufen über -e, und hier ist der Port ein kleines -p, weil es der Schalter von ssh ist, nicht von rsync; ein Host-Eintrag in ~/.ssh/config erspart die gesamte -e-Zeichenkette.
sftp: interaktive Transfers über denselben SSH-Login
sftp bietet eine FTP-ähnliche Eingabeaufforderung über SSH: praktisch, um vor dem Kopieren zu stöbern.
sftp -P 2222 -i ~/.ssh/id_ed25519 user@SERVER_IP
sftp> ls -l /var/www
sftp> lcd ~/Downloads
sftp> get /var/log/syslog
sftp> put -r ./site /var/www/
sftp> reget backup.iso
sftp> bye
Befehle, die mit l beginnen, wirken auf Ihrem Rechner (lcd, lls, lpwd); alle anderen auf dem Server. put -r und get -r kopieren Verzeichnisse, reget und reput setzen eine unterbrochene Datei fort, und !command führt einen lokalen Shell-Befehl aus, ohne die Sitzung zu verlassen. sftp -b commands.txt user@SERVER_IP spielt eine Datei mit diesen Befehlen für Cronjobs ab.
Dateien von Windows kopieren: scp in PowerShell und WinSCP
Windows 10 (ab 1809) und Windows 11 bringen den OpenSSH-Client mit, sodass scp, sftp und ssh in PowerShell mit denselben Schaltern wie unter Linux verfügbar sind:
cd C:\Users\you\Projects
scp -P 2222 -i $HOME\.ssh\id_ed25519 .\site.zip user@SERVER_IP:/home/user/
scp -r user@SERVER_IP:/var/www/site $HOME\Downloads
Die Schlüssel liegen in C:\Users\you\.ssh\ neben known_hosts, und ssh-keygen -R SERVER_IP funktioniert dort ebenfalls. Relative Pfade nach einem cd vermeiden jede Verwechslung zwischen Laufwerksbuchstabe und Hostname. rsync ist nicht enthalten; der sauberste Weg dorthin ist WSL: wsl rsync -avz /mnt/c/Users/you/site/ user@SERVER_IP:/var/www/site/.
Für eine grafische Oberfläche ist WinSCP die übliche Wahl: es beherrscht SFTP und SCP, bietet eine Zwei-Fenster-Ansicht mit Drag-and-drop, und sein Befehl Synchronize entspricht ungefähr dem, was rsync --delete tut. Es erwartet Schlüssel im .ppk-Format von PuTTY und bietet die Umwandlung an, wenn Sie einen OpenSSH-Schlüssel auswählen. Für alles, was wiederholt ausgerollt wird, ist eine einzelne scp- oder rsync-Zeile im Skript leichter prüf- und automatisierbar.
scp, rsync oder sftp: was wann passt
| Aufgabe | Bestes Werkzeug | Warum |
|---|---|---|
| Eine Datei, einmalig | scp | Kürzester Befehl, nichts zu installieren |
| Ein Verzeichnis, erste Kopie | scp -r oder rsync -a | Gleichwertiges Ergebnis |
| Wiederholte Deployments oder Backups | rsync | Nur geänderte Daten werden übertragen |
| Spiegelung mit Löschungen | rsync --delete | scp kann keine Dateien entfernen |
| Große Datei fortsetzen | rsync -P oder sftp reget | scp beginnt wieder bei null |
| Stöbern, dann Dateien auswählen | sftp oder WinSCP | Interaktive Auflistung |
| Tausende kleiner Dateien | rsync oder tar über ssh | Der Overhead pro Datei dominiert bei scp |
| Windows ohne WSL | PowerShell scp oder WinSCP | Kein natives rsync |
Faustregel: scp, wenn Sie den Befehl auswendig tippen können; rsync, sobald Sie ihn ein zweites Mal ausführen.
Tempo-Tipps, die wirklich etwas bringen
- Kompression ist nicht gratis.
-C(scp) und-z(rsync) verkleinern Text, SQL-Dumps und Logs, verschwenden aber CPU bei Tarballs, Bildern und Videos. Zeigttopwährend des Transferssshdbei 100 %, lassen Sie den Schalter weg. - Bündeln Sie viele kleine Dateien. Beim Übertragen eines Quellbaums dominieren die Roundtrips pro Datei; ein einziger Datenstrom ist schneller:
tar czf - ./site | ssh user@SERVER_IP 'tar xzf - -C /var/www/'. - Auf schnellen Leitungen eine andere Chiffre testen. Wenn der ssh-Prozess selbst der Engpass ist, nutzt
scp -c aes128-gcm@openssh.comdie AES-Befehle, die in fast jeder modernen CPU stecken. - Lange Transfers absichern. Führen Sie sie in
tmuxoderscreenaus, damit eine abgebrochene Sitzung die Kopie nicht beendet, oder nutzen Siersync -Pund starten erneut. - Prüfen und drosseln.
sha256sum filemuss auf beiden Seiten übereinstimmen;scp -loderrsync --bwlimitverhindert, dass ein Backup der Anwendung die Bandbreite nimmt.
Rechte, Eigentümer und häufige Fehler
Permission denied auf dem Zielpfad
scp: /var/www//html/: Permission denied bedeutet, dass der Login geklappt hat, dieser Benutzer dort aber nicht schreiben darf. Kopieren Sie in Ihr Home-Verzeichnis und verschieben Sie die Dateien mit sudo mv, übertragen Sie dem Benutzer den Besitz am Ziel (sudo chown -R user:user /var/www/site), oder ergänzen Sie bei rsync --rsync-path="sudo rsync", was funktioniert, wenn der Login-Benutzer sudo ohne Passwort nutzen darf (eingerichtet wie in Benutzer mit sudo-Rechten unter Linux anlegen). Ein Upload als root vermeidet den Fehler, hinterlässt aber root-eigene Dateien, die ein Webserver nicht beschreiben kann: danach sudo chown -R www-data:www-data /var/www/site.
Permission denied (publickey)
Der Server hat die Authentifizierung abgelehnt. Prüfen Sie den Benutzernamen, erzwingen Sie den Schlüssel mit -i, ergänzen Sie -v; auf dem VPS nennt sudo journalctl -u ssh -n 30 den Grund.
Remote host identification has changed
Nach einer Neuinstallation oder einer neu vergebenen IP zu erwarten: Der Hostschlüssel passt nicht mehr zu ~/.ssh/known_hosts. Haben Sie den Server tatsächlich neu aufgesetzt, führen Sie ssh-keygen -R SERVER_IP aus und verbinden sich erneut. Falls nicht, klären Sie die Ursache, bevor Sie irgendwo ein Passwort eingeben.
No such file or directory
scp legt keine übergeordneten Verzeichnisse an: führen Sie zuerst ssh user@SERVER_IP 'mkdir -p /var/www/site' aus. rsync erzeugt nur die letzte Verzeichnisebene (--mkpath, ab rsync 3.2.3, legt auch die übergeordneten an).
rsync: command not found oder protocol data stream (code 12)
rsync fehlt auf einer Seite; dort sudo apt install rsync ausführen und erneut versuchen.
Hochgeladene Skripte, die nicht starten
Dateien aus Windows haben kein Ausführungsrecht und oft CRLF-Zeilenenden, was zu bad interpreter: No such file or directory führt. Beides lösen chmod +x deploy.sh und sed -i 's/\r$//' deploy.sh; die Shebang-Seite behandelt was eine .sh-Datei ist und wie bash sie ausführt. Ein letzter Klassiker: scp file.txt user@SERVER_IP ohne Doppelpunkt hinter dem Host ist eine lokale Kopie, die stillschweigend eine Datei namens user@SERVER_IP anlegt.
All das setzt einen Server voraus, den Sie per SSH als root oder sudo-Benutzer erreichen und bei dem der Transfer selbst die Grenze bildet, nicht ein Kontingent. Ein Linux VPS von rdp.monster ist genau so eine Maschine: voller Root-Zugriff, dedizierte CPU und RAM, unbegrenzte Bandbreite (Fair-Use), kein KYC, Krypto-Zahlung möglich, ab $8.99 pro Monat, und der Server ist rund 10 Sekunden nach Zahlungsbestätigung online, sodass Ihr erster Befehl darauf das scp aus Schritt eins sein kann.
Häufig gestellte Fragen
Ist der scp-Befehl veraltet?
scp Dateien stattdessen über SFTP. Befehl, Schalter und die Syntax user@host:pfad bleiben unverändert, bestehende Skripte funktionieren also weiter; nur die Shell-Expansion in entfernten Pfaden verhält sich anders, und -O stellt das alte Protokoll für Server wieder her, die es benötigen. Für neue Automatisierung sind rsync oder sftp leistungsfähiger, für einmalige Kopien ist scp aber völlig in Ordnung.Kann ich scp mit einem Passwort statt einem SSH-Schlüssel nutzen?
PasswordAuthentication yes, fragt scp das Passwort ab und kopiert; es gibt keinen Schalter, um das Passwort auf der Kommandozeile zu übergeben, und Werkzeuge wie sshpass hinterlassen es in Ihrer Shell-Historie. Abgehärtete Server deaktivieren den Passwort-Login meist, dann scheitert scp mit Permission denied (publickey), bis Sie mit ssh-copy-id einen Schlüssel hinterlegen. Schlüssel sind zudem die Voraussetzung für unbeaufsichtigte Skripte.Überschreibt scp vorhandene Dateien ohne Nachfrage?
-n (--dry-run) zeigt an, was sich ändern würde, --ignore-existing lässt bereits vorhandene Dateien unberührt, --update überspringt am Ziel neuere Dateien, und --backup --backup-dir=DIR bewahrt die ersetzten Versionen auf. Bei allem Unersetzlichen kopieren Sie in ein frisches Verzeichnis und tauschen es anschließend um.Wie kopiere ich Dateien direkt zwischen zwei VPS-Servern?
rsync -avz /data/ user@OTHER_IP:/data/ (oder scp -r) ausführen, damit die Daten nie über Ihren Heimanschluss laufen. Dafür muss der erste Server einen Schlüssel besitzen, den der zweite akzeptiert. Wollen Sie keine Schlüssel auf Servern ablegen, kopiert scp -3 user@HOST_A:/path user@HOST_B:/path über Ihren Rechner mit ausschließlich lokalen Zugangsdaten, um den Preis, alles je einmal herunter- und wieder hochzuladen.Adrien Roche, Redakteur für Infrastruktur & Hosting
Systemingenieur mit über 10 Jahren Erfahrung im Betrieb von Windows-Server- und Linux-Flotten. Adrien pflegt die Infrastruktur-Dokumentation von rdp.monster und schreibt unsere Guides zu RDP, VPS-Hosting, Serveradministration, Netzwerken und Privacy-Tools.
Verwandte Artikel




