RDP Monster

scp-Befehl unter Linux: Dateien zum VPS kopieren (rsync, sftp)

scp-Befehl unter Linux: Dateien zum VPS kopieren (rsync, sftp)

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

AufgabeBestes WerkzeugWarum
Eine Datei, einmaligscpKürzester Befehl, nichts zu installieren
Ein Verzeichnis, erste Kopiescp -r oder rsync -aGleichwertiges Ergebnis
Wiederholte Deployments oder BackupsrsyncNur geänderte Daten werden übertragen
Spiegelung mit Löschungenrsync --deletescp kann keine Dateien entfernen
Große Datei fortsetzenrsync -P oder sftp regetscp beginnt wieder bei null
Stöbern, dann Dateien auswählensftp oder WinSCPInteraktive Auflistung
Tausende kleiner Dateienrsync oder tar über sshDer Overhead pro Datei dominiert bei scp
Windows ohne WSLPowerShell scp oder WinSCPKein 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. Zeigt top während des Transfers sshd bei 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.com die AES-Befehle, die in fast jeder modernen CPU stecken.
  • Lange Transfers absichern. Führen Sie sie in tmux oder screen aus, damit eine abgebrochene Sitzung die Kopie nicht beendet, oder nutzen Sie rsync -P und starten erneut.
  • Prüfen und drosseln. sha256sum file muss auf beiden Seiten übereinstimmen; scp -l oder rsync --bwlimit verhindert, 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 wurde nicht entfernt, überträgt aber seit OpenSSH 9.0 über das SFTP-Protokoll, weil das ursprüngliche scp-Protokoll als veraltet gilt.
Die OpenSSH-Entwickler bezeichneten das ursprüngliche scp/rcp-Protokoll als veraltet und schwer abzusichern; seit OpenSSH 9.0 (2022) verschiebt der Befehl 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?

Ja, sofern der Server Passwort-Authentifizierung noch erlaubt; scp fragt genauso danach wie ssh.
scp verwendet dieselbe Authentifizierung, die ssh für diesen Host nutzen würde. Steht in sshd 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?

Ja: scp und rsync ersetzen Dateien am Ziel stillschweigend. Im Zweifel vorher mit rsync --dry-run prüfen.
scp überschreibt jede gleichnamige Datei am Ziel ohne Nachfrage und ohne Möglichkeit zum Überspringen. rsync überschreibt ebenfalls, aber nur wenn sich die Quelle unterscheidet, und gibt Ihnen Kontrolle: -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?

Entweder rsync oder scp auf einem Server ausführen und auf den anderen zielen, oder mit scp -3 die Kopie über den eigenen Rechner leiten.
Am schnellsten ist der Weg von Server zu Server: per ssh auf den Quell-VPS und dort 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.

Für unser Reseller-Programm registrieren

Ihre Angaben

Wenn Sie Fragen haben, kontaktieren Sie uns hier !
Name(Pflichtfeld)
Geben Sie Ihre E-Mail-Adresse ein. Sie benötigen ein Konto bei dashboard.rdp.monster !

Ihr Unternehmen

Geben Sie Ihre Website-Adresse ein, falls Sie eine haben
Beschreiben Sie kurz, wie Sie Ihre Dienste an Ihre Kunden verkaufen wollen. Zum Beispiel: Nutzer in Foren ansprechen.

Wir verwenden Cookies!

Wir verwenden Cookies, um Ihr Surferlebnis zu verbessern, personalisierte Anzeigen oder Inhalte anzuzeigen und unseren Traffic zu analysieren. Mit einem Klick auf „Akzeptieren“ stimmen Sie der Nutzung von Cookies zu.