scp-Befehl: Verwendung und Optionen, Ordner kopieren und Port angeben
scp ist das Kopierwerkzeug, mit dem du Dateien mit einem Server austauschst, den du per SSH erreichst. Wenn du mit dem scp-Befehl eine Datei sendest, schreibst du wie bei cp zuerst die Quelle und danach das Ziel. Als wir Dateien und Ordner von einem AlmaLinux-9-Server an einen Debian-12-Server gesendet und zurückgeholt haben, lief die Übertragung über das SFTP-Protokoll und eine 20MB große Datei kam in unter 1 Sekunde an.
Alle Ausgaben unten sind unverändert das Ergebnis von scp aus OpenSSH 9.9 unter dem root-Konto auf der Senderseite. Nur Serveradressen und Kontonamen wurden durch Beispielwerte ersetzt.
1️⃣ scp-Verwendung und Remote-Pfade
Vor einen Pfad auf dem Remote-Server setzt du [Konto@Serveradresse:]. Ein Pfad ohne Doppelpunkt gilt als Pfad auf dem Server, auf dem du den Befehl ausführst. Die Seite mit dem Doppelpunkt entscheidet also, ob du sendest oder empfängst.
Sendet report.txt aus dem aktuellen Ordner in den Ordner scp-test unter dem Home-Verzeichnis des Remote-Servers.
scp report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.1KB/s 00:00Nach der Übertragung erscheinen Dateiname, Fortschritt, Größe, Geschwindigkeit und Dauer in einer Zeile. Diese Fortschrittsanzeige erscheint nur bei der Ausführung im Terminal. Leitest du die Ausgabe in eine Datei um, bleibt die Datei deshalb leer.
Zum Holen schreibst du den Remote-Pfad nach vorn und den lokalen Speicherpfad nach hinten.
scp user@203.0.113.10:~/scp-test/report.txt ./downloads/report.txt 100% 14 2.7KB/s 00:00Endet der Zielpfad nicht mit einem Ordner, sondern mit einem Dateinamen, wird unter diesem Namen gespeichert. Nach dem Senden mit dem Befehl unten lag report.txt im Ordner der Empfängerseite unter dem Namen report-1028.txt.
scp report.txt user@203.0.113.10:~/scp-test/report-1028.txtreport.txt 100% 14 4.6KB/s 00:00🔲 scp-Befehl-Simulator
Im Simulator unten kannst du Befehle zum Senden, Empfangen und Kopieren von Ordnern selbst eingeben und die Ausgabe je Option prüfen.
2️⃣ Optionen des scp-Befehls
Optionen stehen direkt nach scp und vor der Quelle. -P für den Port ist ein Großbuchstabe, das kleine -p erhält Zeitstempel und Rechte. Verwechselst du die Schreibweise, wird also etwas anderes ausgeführt.
-l legt die Obergrenze der Übertragungsgeschwindigkeit in Kbit/s fest. Ohne Option war eine 20MB große Datei in unter 1 Sekunde übertragen.
scp backup.tar.gz user@203.0.113.10:~/scp-test/backup.tar.gz 100% 20MB 53.6MB/s 00:00-l 8000 entspricht etwa 1,000KB pro Sekunde. Mit -l 8000 zeigte die Fortschrittsanzeige bei derselben Datei 996.5KB/s, und die Übertragung dauerte 20 Sekunden.
scp -l 8000 backup.tar.gz user@203.0.113.10:~/scp-test/backup-l.tar.gzbackup.tar.gz 100% 20MB 996.5KB/s 00:20-C komprimiert die Daten in der SSH-Verbindung nach demselben Verfahren wie gzip. Wir haben eine 19MB große Logdatei mit wiederholten Sätzen jeweils dreimal gesendet. Zwischen diesen beiden Servern war die Variante mit -C etwas langsamer.
| Befehl | Datei | Laufzeit | Geschwindigkeit der Fortschrittsanzeige |
|---|---|---|---|
| scp backup.tar.gz | 20MB | 0,68 s | 53.6MB/s |
| scp -l 8000 backup.tar.gz | 20MB | 20.82 s | 996.5KB/s |
| scp access.log (3-mal) | 19MB | 0.79~0.89 s | — |
| scp -C access.log (3-mal) | 19MB | 0.84~0.97 s | — |
Die Laufzeit reicht vom Start des Befehls über die Verbindung bis zum Ende der Übertragung. Auch das ssh-Handbuch erklärt, dass Kompression auf langsamen Leitungen hilft und in schnellen Netzwerken die Übertragung bremst.
-v gibt den Ablauf von der Verbindung bis zur Übertragung als debug1-Zeilen aus. Damit findest du die Ursache, wenn keine Verbindung zustande kommt oder die Authentifizierung hängt. Die Ausgabe ist lang, daher haben wir mit grep nur die Zeilen zu Authentifizierung und Übertragung ausgewählt.
scp -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending subsystem: sftp
Transferred: sent 2536, received 3248 bytes, in 0.1 secondsDie Zeile [Sending subsystem: sftp] bedeutet, dass scp die Datei über das SFTP-Protokoll gesendet hat. Seit OpenSSH 9.0 nutzt scp standardmäßig SFTP. Mit -O wird über das alte SCP-Protokoll übertragen, und an derselben Stelle erscheint [Sending command: scp -v -t].
scp -O -v report.txt user@203.0.113.10:~/scp-test/ 2>&1 | grep -E 'Authenticated|Sending|Transferred'Authenticated to 203.0.113.10 ([203.0.113.10]:22) using "publickey".
debug1: Sending command: scp -v -t ~/scp-test/
Sending file modes: C0600 14 report.txt
Transferred: sent 2328, received 3036 bytes, in 0.1 seconds📌 Wichtige Optionen: Ergebnisse aus diesem Artikel
| Option | Was es tut | Ergebnis in diesem Artikel | |
|---|---|---|---|
| -P | Gibt den SSH-Verbindungsport an | Port 22: report.txt übertragen, nicht geöffneter Port 2222: Ende mit [Connection timed out] | |
| -i | Gibt die private Schlüsseldatei für die Public-Key-Authentifizierung an | report.txt mit angegebenem ~/.ssh/id_ed25519 übertragen | |
| -r | Kopiert Dateien im Ordner samt Unterordnern | Auf der Empfängerseite bleiben die Ordner css und images in der ursprünglichen Struktur erhalten; ohne die Option keine Übertragung wegen des Fehlers [not a regular file] | |
| -p | Erhält Änderungszeit, Zugriffszeit und Rechte der Quelle | Änderungszeit erhalten; auf der Empfängerseite dieses Artikels blieb Recht 600 nur bei der mit -O -p gesendeten Datei | |
| -C | Komprimiert die Daten in der SSH-Verbindung | Beim 19MB-Log zwischen den beiden Servern dieses Artikels war die Variante mit Option etwas langsamer | |
| -l | Legt die Obergrenze der Übertragungsgeschwindigkeit in Kbit/s fest | Mit -l 8000: 20MB mit 996.5KB/s, 20.82 Sekunden | |
| -v | Gibt den Ablauf von der Verbindung bis zur Übertragung als debug1-Zeilen aus | SFTP-Übertragung an der Zeile [Sending subsystem: sftp] bestätigt | |
| -3 | Überträgt Daten zwischen zwei Remote-Servern über den Server, der den Befehl ausführt (Standard seit OpenSSH 8.7) | report.txt übertragen, mit zwei Ordnern desselben Servers als Quelle und Ziel | |
| -O | Überträgt über das alte SCP-Protokoll | In der -v-Ausgabe erscheint [Sending command: scp -v -t]; Pfade mit Leerzeichen brauchen einen zusätzlichen Backslash | |
| -o | Übergibt eine Option im ssh_config-Format an ssh | Mit ConnectTimeout=10 Wartezeit auf 10 Sekunden gesetzt und [Connection timed out] bestätigt |
📎 Weitere Optionen: laut offiziellem Handbuch
| Option | Was es tut | |
|---|---|---|
| -q | Schaltet Fortschrittsanzeige sowie Warn- und Diagnosemeldungen von ssh ab | |
| -J | Verbindet sich zuerst mit einem Jump-Host und richtet von dort eine TCP-Weiterleitung zum Endziel ein (Kurzform der ProxyJump-Einstellung, mehrere Hops mit Komma trennen) | |
| -F | Gibt eine andere Datei als benutzerspezifische ssh-Konfigurationsdatei an (wird direkt an ssh übergeben) | |
| -4 | Erzwingt die Nutzung von IPv4-Adressen | |
| -6 | Erzwingt die Nutzung von IPv6-Adressen |
3️⃣ Ordner mit scp kopieren und Zeitstempel erhalten
Gibst du einen Ordner ohne Option an, meldet scp einen Fehler, dass es keine reguläre Datei ist, und überträgt nichts.
scp site-files user@203.0.113.10:~/scp-test/scp: local "site-files" is not a regular file
scp: failed to upload file site-files to ~/scp-test/Mit -r werden die Dateien im Ordner samt Unterordnern kopiert.
scp -r site-files user@203.0.113.10:~/scp-test/logo.png 100% 48KB 4.7MB/s 00:00
style.css 100% 15 5.0KB/s 00:00
index.html 100% 15 5.2KB/s 00:00Die Ausgabe zeigt nur Dateinamen. In der find-Ausgabe der Empfängerseite lagen unter site-files die Ordner css und images in der ursprünglichen Struktur.
ssh user@203.0.113.10 'cd ~/scp-test && find site-files'site-files
site-files/images
site-files/images/logo.png
site-files/index.html
site-files/css
site-files/css/style.css-r folgt symbolischen Links im Ordner und kopiert die Originaldateien. Für Ordner, in denen Links als Links erhalten bleiben müssen, passt daher rsync -a.
-p erhält Änderungszeit, Zugriffszeit und Rechte der Quelle. Vor dem Senden haben wir die Quelldatei report.txt auf die Änderungszeit 1. Oktober 2026 00:00 (UTC) und die Rechte 600 gesetzt. Die Zeitzone des Empfängerservers ist UTC, daher lief auch ls auf der Senderseite mit TZ=UTC.
TZ=UTC ls -l report.txt-rw------- 1 root root 14 Oct 1 00:00 report.txtscp -p report.txt user@203.0.113.10:~/scp-test/report-p.txtreport.txt 100% 14 4.7KB/s 00:00scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txtreport.txt 100% 14 4.2KB/s 00:00ssh user@203.0.113.10 'ls -l ~/scp-test/report.txt ~/scp-test/report-p.txt ~/scp-test/report-Op.txt'-rw------- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-Op.txt
-rw-rw-r-- 1 user user 14 Oct 1 00:00 /home/user/scp-test/report-p.txt
-rw-rw-r-- 1 user user 14 Oct 28 06:17 /home/user/scp-test/report.txtBei report-p.txt (mit -p gesendet) und report-Op.txt (mit -O -p gesendet) blieb die ursprüngliche Zeit erhalten, report.txt ohne Option wurde mit der Sendezeit gespeichert. Auf dem Empfängerserver erhielten per SFTP gesendete Dateien auch mit -p die Rechte 664, nur die über das alte SCP-Protokoll (-O) gesendete Datei behielt 600.
Bei Dateien, deren Rechte mit der Quelle übereinstimmen müssen, prüfst du die Rechte deshalb nach dem Senden auf der Empfängerseite mit ls -l.
4️⃣ Port und Schlüsseldatei bei scp angeben
Bei Servern, die nicht über den Standardport 22 und den Standardschlüssel erreichbar sind, gibst du Port und Schlüssel vor dem Senden selbst an. -P gibt den SSH-Verbindungsport an, -i die private Schlüsseldatei für die Public-Key-Authentifizierung.
Unten siehst du ein Beispiel, das Port 22 und eine Schlüsseldatei direkt angibt. Bei einem Server mit geändertem Port schreibst du statt 22 diese Nummer.
scp -P 22 -i ~/.ssh/id_ed25519 report.txt user@203.0.113.10:~/scp-test/report.txt 100% 14 5.3KB/s 00:00Ohne -i werden wie bei ssh die Schlüssel mit Standardnamen unter ~/.ssh (id_rsa, id_ecdsa, id_ed25519 usw.) der Reihe nach verwendet.
Sendest du oft an denselben Server, trägst du in ~/.ssh/config einen Alias ein und gibst bei scp nur noch den Alias an.
Host myserver
HostName 203.0.113.10
User user
Port 22
IdentityFile ~/.ssh/id_ed25519Der Name in der Host-Zeile wird zum Alias, und die vier Zeilen darunter ersetzen Serveradresse, Konto, Port und Schlüsseldatei. Auch der Befehl nur mit Alias endete mit demselben einzeiligen Ergebnis wie mit vollständiger Adresse und Schlüssel.
scp report.txt myserver:~/scp-test/report.txt 100% 14 4.2KB/s 00:00-P, -i und Aliase nutzen alle unverändert die ssh-Verbindungseinstellungen. Auch das Erstellen eines Schlüssels und das Eintragen auf dem Server läuft daher genauso ab wie bei der Verbindung mit dem SSH-Befehl.
5️⃣ Kopieren zwischen Servern mit scp
Auch wenn Quelle und Ziel beide Remote-Server sind, reicht eine Zeile scp. Seit OpenSSH 8.7 werden die Daten über den Server übertragen, der den Befehl ausführt, und dieses Verfahren ist -3. Die offiziellen Release Notes nennen als Grund für den neuen Standard, dass die Zugangsdaten des Zielservers nicht auf dem Quellserver liegen müssen.
Die Messung unten lief mit zwei Ordnern desselben Servers als Quelle und Ziel. Ist der Zielserver ein anderer, änderst du nur Konto und Adresse am Ende.
scp -3 user@203.0.113.10:~/scp-test/report.txt user@203.0.113.10:~/scp-test/copy3/report.txt 100% 14 2.5KB/s 00:00Das ist, als würde die Zentrale Unterlagen zwischen zwei Filialen annehmen und weiterschicken.
Das frühere Verfahren, bei dem der Quellserver direkt an den Zielserver sendet, gibst du mit -R an. Dafür muss sich der Quellserver ohne Passwort mit dem Zielserver verbinden können. Ab OpenSSH 10.6 erscheint bei -R eine Warnung, dass die Option veraltet ist, und spätere Versionen sollen sie ignorieren und nach dem Verfahren -3 kopieren.
6️⃣ scp und rsync im Vergleich
Für wenige Dateien, die einmal gesendet werden, reicht scp. Wenn du denselben Ordner wiederholt abgleichen oder abgebrochene Übertragungen fortsetzen willst, passt der rsync-Befehl. scp sendet bei jedem Aufruf alle angegebenen Dateien neu, rsync vergleicht Quelle und Ziel und überträgt nur geänderte Dateien.
| Kategorie | scp | rsync |
|---|---|---|
| Übertragungsumfang | Bei jedem Aufruf alle angegebenen Dateien | Nur gegenüber der Quelle geänderte Dateien |
| Teilweise empfangene Dateien behalten (--partial) | ❌ | ✅ |
| Dateien löschen, die in der Quelle fehlen (--delete) | ❌ | ✅ |
| Symbolische Links | Folgt ihnen und kopiert die Originaldateien | Mit -a bleiben Links erhalten |
| Bedarf auf der Empfängerseite | SSH-Zugang und SFTP-Server | rsync auf beiden Seiten installiert |
7️⃣ Fehlermeldungen des scp-Befehls und Lösungen
Schlägt scp fehl, steht die Ursache direkt in der ersten Ausgabezeile. In allen drei Fällen, in denen wir Fehler mit einer fehlenden Datei, Schreibrechten und einem falschen Port absichtlich ausgelöst haben, stand die Ursache in der ersten Zeile, und auch der Exit-Code war jedes Mal nicht 0.
🔲 No such file or directory
Willst du eine Datei holen, die es auf der Remote-Seite nicht gibt, erscheint [No such file or directory] zusammen mit dem Pfad.
scp user@203.0.113.10:~/scp-test/nofile.txt ./downloads/scp: ~/scp-test/nofile.txt: No such file or directoryFehlt beim Senden der Zielordner, kommt derselbe Fehler. scp legt keine fehlenden Ordner an, also führst du zuerst per ssh mkdir -p aus und erstellst den Ordner.
scp report.txt user@203.0.113.10:~/scp-test/nodir/sub/scp: dest open "scp-test/nodir/sub/": No such file or directory
scp: failed to upload file report.txt to ~/scp-test/nodir/sub/🔲 Permission denied
Fehlt im Ordner der Empfängerseite das Schreibrecht, folgt auf [dest open] die Meldung [Permission denied]. Unten siehst du das Ergebnis beim Senden an einen Ordner readonly mit den Rechten 555.
scp report.txt user@203.0.113.10:~/scp-test/readonly/scp: dest open "scp-test/readonly/report.txt": Permission denied
scp: failed to upload file report.txt to ~/scp-test/readonly/Steht vor [Permission denied] ein [Konto@Serveradresse:] und in Klammern ein Authentifizierungsverfahren wie publickey, wurde die Verbindung bei der Authentifizierung abgelehnt. Diese Meldung ist das Format, das ssh bei fehlgeschlagener Authentifizierung ausgibt. Prüfe daher zuerst die mit -i angegebene Schlüsseldatei und den auf dem Server eingetragenen öffentlichen Schlüssel.
🔲 Connection timed out
Ist die Portnummer falsch oder blockiert eine Firewall den Port, sodass keine Antwort kommt, wartet scp auf die Verbindung und endet mit [Connection timed out]. Unten siehst du das Ergebnis beim Senden an den nicht geöffneten Port 2222 mit 10 Sekunden Wartezeit.
scp -P 2222 -o ConnectTimeout=10 report.txt user@203.0.113.10:~/scp-test/ssh: connect to host 203.0.113.10 port 2222: Connection timed out
scp: Connection closedBei diesem Fehler prüfst du zuerst, ob die Nummer bei -P dem SSH-Port des Servers entspricht.
🔲 Leerzeichen und Tilde (~) in Pfaden
Beim heutigen scp, das über SFTP überträgt, reicht es, einen Remote-Pfad mit Leerzeichen einmal in einfache Anführungszeichen zu setzen.
scp report.txt 'user@203.0.113.10:~/scp-test/my files/'report.txt 100% 14 4.7KB/s 00:00Als wir denselben Befehl mit -O über das alte SCP-Protokoll gesendet haben, schlug er mit [ambiguous target] fehl. Denn beim alten SCP-Protokoll wertet die Remote-Shell den Pfad ein weiteres Mal aus.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my files/'scp: ambiguous targetSetze dann einen Backslash vor das Leerzeichen, damit auch die Remote-Shell es als ein Wort liest.
scp -O report.txt 'user@203.0.113.10:~/scp-test/my\ files/'report.txt 100% 14 4.5KB/s 00:00Beginnt der Pfad nach dem Doppelpunkt ohne Schrägstrich oder Tilde, wird er relativ zum Home-Ordner des Remote-Kontos behandelt.
scp report.txt user@203.0.113.10:scp-test/report-rel.txtreport.txt 100% 14 5.6KB/s 00:00Das offizielle Handbuch empfiehlt -O, wenn ein alter SFTP-Server einen mit Tilde beginnenden Pfad nicht in den Home-Ordner umwandeln kann. Dann landet die Datei auch mit einem Pfad relativ zum Home-Ordner ohne Tilde wie oben an derselben Stelle.
🔢 FAQ & empfohlene Inhalte











ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.