Gängige Beispiele
| Aufgabe | Befehl |
|---|---|
| Eine Datei hochladen | scp report.pdf user@server:/tmp/ |
| Eine Datei herunterladen | scp user@server:/tmp/report.pdf . |
| Mit neuem Namen herunterladen | scp user@server:/tmp/report.pdf copy.pdf |
| Einen Ordner hochladen | scp -r site user@server:/tmp/ |
| Den Inhalt eines Ordners herunterladen | scp -r 'user@server:/tmp/site/*' dl/ |
| Anderer Port | scp -P 2222 file user@server:/tmp/ |
| Einen bestimmten Schlüssel verwenden | scp -i ~/.ssh/id_work file user@server:/tmp/ |
| Zeiten und Rechte beibehalten | scp -p file user@server:/tmp/ |
| Geschwindigkeit begrenzen, in Kbit/s | scp -l 800 file user@server:/tmp/ |
| Komprimieren | scp -C file user@server:/tmp/ |
| Über einen Jump-Host | scp -J user@jump file user@server:/tmp/ |
Ein Host-Eintrag in ~/.ssh/config funktioniert auch hier: scp file server:/tmp/. Siehe die SSH-Konfigurationsdatei.
Die Zeile mit -J führt über einen Jump-Host. Um diesen Weg fest zu speichern, siehe ProxyJump und Jump-Hosts.
Einen Ordner zweimal kopieren verschachtelt ihn
Existiert der Zielordner bereits, legt scp -r den Ordner in ihn hinein. Mit bereits vorhandenem /tmp/site auf dem Server ergab dies bei uns /tmp/site/site:
scp -r site user@server:/tmp/site
Der erste Lauf legt also /tmp/site an und ein zweiter /tmp/site/site. Um einen Ordner wiederholt zu kopieren, nehmen Sie stattdessen rsync.
Namen mit Leerzeichen
scp "my file.txt" "user@server:/tmp/my file.txt"
Das funktioniert mit dem standardmäßigen SFTP-Protokoll. Mit dem alten Protokoll durch -O scheiterte dieselbe Zeile mit scp: ambiguous target, weil die Gegenseite den Namen noch einmal auswertet. Fügen Sie dann ein zweites Paar Anführungszeichen hinzu:
scp -O "my file.txt" 'user@server:"/tmp/my file.txt"'
Zwischen zwei Servern
scp -3 user@one:/tmp/file user@two:/tmp/
-3 leitet die Daten über Ihren Rechner, sodass keiner der Server eine Anmeldung am anderen braucht. Seit OpenSSH 8.7 ist das der Standard, die Option macht es nur ausdrücklich. In unserem Test lief auch eine Kopie ohne -3 über den lokalen Client.
Damit sich der erste Server direkt mit dem zweiten verbindet, nutzen Sie -R:
scp -R user@one:/tmp/file user@two:/tmp/
Der erste Server muss sich dann ohne Abfrage am zweiten anmelden können und dessen Host-Schlüssel bereits kennen. Sonst erhalten Sie Host key verification failed., was in unserem Test passiert ist.
-O: das Legacy-Protokoll
Seit OpenSSH 9.0 nutzt scp standardmäßig das SFTP-Protokoll. Sie sehen das mit scp -v, das Sending subsystem: sftp ausgibt. Mit -O gibt es Sending command: scp -v -t /tmp/ aus.
scp -O file user@server:/tmp/
Sie brauchen -O, wenn die Gegenseite kein SFTP-Subsystem hat, etwa bei manchen Embedded-Geräten. Der übliche Fehler lautet dann subsystem request failed on channel 0. Siehe die Anleitung zu diesem Fehler.
Was scp nicht kann
- Es setzt eine abgebrochene Übertragung nicht fort. Führen Sie es erneut aus, beginnt es von vorn.
- Es sendet nicht nur, was sich geändert hat.
Dafür nutzen Sie rsync oder reget in sftp. Den vollständigen Vergleich lesen Sie in scp, SFTP oder rsync.
Fragen
Wie kopiere ich einen Ordner mit scp?
Mit -r: scp -r ordner user@server:/tmp/. Gibt es den Zielordner schon, legt scp den Ordner darin ab.
Wie nutze ich scp mit einem anderen Port?
Mit großem -P, zum Beispiel scp -P 2222 file user@server:/tmp/. Das kleine -p behält dagegen Zeiten und Rechte der Dateien bei.
Kann scp eine abgebrochene Übertragung fortsetzen?
Nein. Ein neuer Aufruf beginnt die Datei von vorn. Nutzen Sie rsync mit --partial oder reget und reput in sftp.