scp-Befehl: Verwendung und Optionen, Ordner kopieren und Port angeben

TestumgebungRHEL-FamilieAlmaLinux 9.8OpenSSH 9.9p1Empfängerseite Debian 12 · OpenSSH 9.2p1root-KontoGeprüft am 2026-10-28

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.

🧭 scp-Kopierrichtung und Remote-Pfade
Erklär-Diagramm
↔️ Kopierrichtung
$ scp report.txt user@203.0.113.10:~/scp-test/user@203.0.113.10:~/scp-test/report.txt ./downloads/-3 user@203.0.113.10:~/scp-test/report.txt user@198.51.100.20:~/scp-test/
Quelle💻 Server, der den Befehl ausführtreport.txt
➜
Ziel🖥️ Remote-Server203.0.113.10:~/scp-test/
Quelle🖥️ Remote-Server203.0.113.10:~/scp-test/report.txt
➜
Ziel💻 Server, der den Befehl ausführt./downloads/
Quelle🖥️ Remote-Server A203.0.113.10:~/scp-test/report.txt
➜
Weiterleitung💻 Server, der den Befehl ausführt-3
➜
Ziel🖥️ Remote-Server B198.51.100.20:~/scp-test/
🧩 Form des Remote-Pfads
user das Konto für die Verbindung, 203.0.113.10 die Serveradresse oder Domain, :~/scp-test/ nach dem Doppelpunkt der Pfad auf diesem Server (die Tilde steht für den Home-Ordner)
Steht die lokale Datei vorn und der Remote-Pfad hinten, sendest du. Endet der Pfad nach dem Doppelpunkt mit einem Schrägstrich, wird die Datei unter gleichem Namen in diesem Ordner gespeichert.
Steht der Remote-Pfad vorn, empfängst du. Die empfangene Datei landet im dahinter angegebenen lokalen Pfad.
Sind Quelle und Ziel beide Remote-Server, laufen die Daten ab OpenSSH 8.7 über den Server, der den Befehl ausführt. Das ist dasselbe Verfahren wie mit -3.

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:00

Nach 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:00

Endet 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.txt
report.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.

scp-Befehl-SimulatorOpenSSH 9.9
[root@server work]#
Läuft nur im Browser. In der Liste links siehst du die Dateien auf der Remote-Seite, und mit ↑↓ holst du frühere Befehle zurück.

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.gz
backup.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.

BefehlDateiLaufzeitGeschwindigkeit der Fortschrittsanzeige
scp backup.tar.gz20MB0,68 s53.6MB/s
scp -l 8000 backup.tar.gz20MB20.82 s996.5KB/s
scp access.log (3-mal)19MB0.79~0.89 s—
scp -C access.log (3-mal)19MB0.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 seconds

Die 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

OptionWas es tutErgebnis in diesem Artikel
-PGibt den SSH-Verbindungsport anPort 22: report.txt übertragen, nicht geöffneter Port 2222: Ende mit [Connection timed out]
-iGibt die private Schlüsseldatei für die Public-Key-Authentifizierung anreport.txt mit angegebenem ~/.ssh/id_ed25519 übertragen
-rKopiert Dateien im Ordner samt UnterordnernAuf 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]
-pErhä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
-CKomprimiert die Daten in der SSH-VerbindungBeim 19MB-Log zwischen den beiden Servern dieses Artikels war die Variante mit Option etwas langsamer
-lLegt die Obergrenze der Übertragungsgeschwindigkeit in Kbit/s festMit -l 8000: 20MB mit 996.5KB/s, 20.82 Sekunden
-vGibt den Ablauf von der Verbindung bis zur Übertragung als debug1-Zeilen ausSFTP-Ü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-ProtokollIn 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 sshMit ConnectTimeout=10 Wartezeit auf 10 Sekunden gesetzt und [Connection timed out] bestätigt

📎 Weitere Optionen: laut offiziellem Handbuch

OptionWas es tut
-qSchaltet Fortschrittsanzeige sowie Warn- und Diagnosemeldungen von ssh ab
-JVerbindet 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)
-FGibt eine andere Datei als benutzerspezifische ssh-Konfigurationsdatei an (wird direkt an ssh übergeben)
-4Erzwingt die Nutzung von IPv4-Adressen
-6Erzwingt 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:00

Die 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.txt
scp -p report.txt user@203.0.113.10:~/scp-test/report-p.txt
report.txt                                    100%   14     4.7KB/s   00:00
scp -O -p report.txt user@203.0.113.10:~/scp-test/report-Op.txt
report.txt                                    100%   14     4.2KB/s   00:00
ssh 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.txt

Bei 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:00

Ohne -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_ed25519

Der 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:00

Das 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.

Kategoriescprsync
ÜbertragungsumfangBei jedem Aufruf alle angegebenen DateienNur gegenüber der Quelle geänderte Dateien
Teilweise empfangene Dateien behalten (--partial)❌✅
Dateien löschen, die in der Quelle fehlen (--delete)❌✅
Symbolische LinksFolgt ihnen und kopiert die OriginaldateienMit -a bleiben Links erhalten
Bedarf auf der EmpfängerseiteSSH-Zugang und SFTP-Serverrsync 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 directory

Fehlt 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 closed

Bei 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:00

Als 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 target

Setze 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:00

Beginnt 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.txt
report.txt                                    100%   14     5.6KB/s   00:00

Das 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

Gibt es eine Datei gleichen Namens, wird sie ohne Rückfrage durch die neue überschrieben. Auch als wir dieselbe report.txt mehrmals in denselben Ordner gesendet haben, wurde jedes Mal ohne Rückfrage übertragen. Dateien, die du behalten musst, sendest du deshalb mit einem anderen Namen am Ende des Zielpfads.

Setzt du * in den Remote-Pfad und schließt ihn in einfache Anführungszeichen ein, werden alle Dateien mit passendem Namen vom Remote-Server geholt. Beim Holen von report-*.txt vom Remote-Server wurden die sechs passenden Dateien nacheinander übertragen. Die Anführungszeichen verhindern, dass die Shell des Servers, der den Befehl ausführt, * zuerst auswertet.

Mit -B läuft scp im Batch-Modus, der weder nach Passwort noch nach Passphrase fragt. Laut offiziellem Handbuch lässt sich in diesem Modus kein Passwort eingeben, richte für automatische Aufgaben wie Cron also zuerst die Schlüsselauthentifizierung ein.

🧭 Empfohlene Artikel zu Netzwerkbefehlen 13 Beiträge · 2 Referenzen
🗂️ Netzwerkbefehle
📄 ip-Befehl 📄 netstat- und ifconfig-Befehle 📄 nmtui-Befehl
📄 SSH-Befehl 📄 rsync-Befehl 📄 wget-Befehl 📄 rz- und sz-Befehle 📄 scp-Befehl
📄 host-Befehl 📄 nslookup-Befehl
📄 iptables-Befehl 📄 firewall-cmd-Befehl 📄 certbot-Befehl

ℹ️ 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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 1   +   2   =