SCP ist das klas­si­sche Tool, um unter Linux und POSIX-kom­pa­ti­blen Be­triebs­sys­te­men Dateien zwischen Maschinen im Netzwerk ver­schlüs­selt zu kopieren. Dabei steht die Abkürzung SCP für Secure Copy („sicheres Kopieren“), wobei „sicher“ auf die zum Einsatz kommende Ver­schlüs­se­lung des Da­ten­trans­fers verweist. Der Name des SCP-Pro­to­kolls ist ab­ge­lei­tet von den beiden zu­grun­de­lie­gen­den Tech­no­lo­gien:

  • dem SSH-Protokoll (Secure Shell), das den ver­schlüs­sel­ten Zugriff auf entfernte Systeme er­mög­licht;
  • dem RCP-Tool (Remote Copy), das unsicher, d. h. ohne Ver­schlüs­se­lung, Dateien im Netzwerk kopiert.

Beim SCP-Befehl handelt es sich um eine Software, die auf dem lokalen System und dem Server läuft. Dabei fungiert das Tool als Daemon und Client für das SCP-Protokoll. Da SCP Teil der breit­flä­chig ein­ge­setz­ten OpenSSH-Dis­tri­bu­ti­on ist, steht es auf so gut wie allen Systemen zur Verfügung. Der Einsatz des SCP-Befehls erfolgt wie bei Linux üblich auf der Kom­man­do­zei­le.

Einer der gra­vie­ren­den Nachteile des SCP-Pro­to­kolls ist, dass die Software organisch gewachsen ist. Es existiert weder eine Stan­dar­di­sie­rung noch ein be­schrei­ben­des RFC-Dokument oder eine ähnliche Spe­zi­fi­ka­ti­on. Statt­des­sen liegt lediglich eine Referenz-Im­ple­men­tie­rung als Teil des OpenSSH-Projekts vor. Heut­zu­ta­ge gibt es moderne Al­ter­na­ti­ven zu SCP, die für die meisten An­wen­dungs­fäl­le bevorzugt werden.

Funk­tio­na­li­tät und Nutzung des Linux-SCP-Befehls

Die Funk­tio­na­li­tät des SCP-Befehls ist analog zum älteren RCP-Befehl. Wie bei RCP folgt die SCP-Syntax auf der Kom­man­do­zei­le dem CP-Befehl, mit dem Dateien auf dem lokalen System kopiert werden. Da SCP auf dem SSH-Protokoll aufsetzt, läuft die Netz­werk­kom­mu­ni­ka­ti­on über den TCP-Port 22. Hier eine Übersicht ge­bräuch­li­cher Linux-Befehle zum Kopieren von Dateien:

Ko­pier­be­fehl Name Funk­tio­na­li­tät Remote-Zugriff
cp Copy Kopie, nur lokal -
rcp Remote Copy Kopie lokal-remote, remote-remote RSH
scp Secure Copy Sichere Kopie lokal-remote, remote-remote SSH
sftp Secure File Transfer Protocol Sichere Kopie lokal-remote, remote-remote; Ma­ni­pu­la­ti­on ent­fern­ter Da­tei­sys­te­me SSH
rsync Remote Sync Sichere Kopie lokal, lokal-remote, remote-remote; Syn­chro­ni­sie­rung SSH, Stunnel

Mit SCP kann man eine Datei auf einen Server kopieren bzw. von einem Server her­un­ter­la­den. Das Protokoll erlaubt lediglich einen uni­di­rek­tio­na­len Da­ten­fluss; das bedeutet, dass man pro Ver­bin­dung nur in eine Richtung kopieren kann. Ferner ist es mit SCP möglich, Dateien zwischen zwei Systemen im Netzwerk zu kopieren. Optional lassen sich bei allen Ko­pier­vor­gän­gen die Datei-Attribute der Quell­da­tei auf die Zieldatei über­tra­gen.

Da­ten­fluss beim Kopieren zwischen zwei ent­fern­ten Systemen

Möchte man unter Linux mit SCP eine Datei zwischen zwei ent­fern­ten Systemen kopieren, gibt es einige Be­son­der­hei­ten zu beachten. SCP nutzt das SSH-Protokoll, um ver­schlüs­sel­te Ver­bin­dun­gen auf­zu­bau­en. Der Zugriff auf ein ent­fern­tes System mit SSH erfolgt entweder mit Nut­zer­na­me und Passwort oder mit SSH-Keys (öf­fent­li­chem/privatem Schlüs­sel­paar). Generell ist die private der öf­fent­li­chen Methode vor­zu­zie­hen.

In der ur­sprüng­li­chen Variante, in der mit SCP eine Datei von einem ent­fern­ten System (Host) auf einen anderen Host über­tra­gen wird, läuft der folgende Prozess ab:

  1. Der Nutzer weist das SCP-Tool auf seinem lokalen System an, eine Datei, die sich auf Host 1 befindet, auf Host 2 zu über­tra­gen.
  2. Das SCP-Programm auf dem lokalen System des Nutzers öffnet eine SSH-Ver­bin­dung zu Host 1 und führt das dort be­find­li­che SCP-Programm aus.
  3. Das SCP-Programm auf Host 1 öffnet eine SSH-Ver­bin­dung zu Host 2 und überträgt die auf Host 1 ge­spei­cher­te Datei wie eine lokale Datei an Host 2.

Damit dieser Ablauf funk­tio­nie­ren kann, muss ein öf­fent­li­cher SSH-Schlüssel von Host 1 auf Host 2 hin­ter­legt sein. Ist dies der Fall, besteht jedoch ein dau­er­haf­ter Zugriff von Host 1 auf Host 2 ohne Zutun des Nutzers, was ein Si­cher­heits­ri­si­ko darstellt. Daher gibt es eine modernere Variante:

  1. Der Nutzer weist das SCP-Tool auf seinem lokalen System an, eine Datei, die sich auf Host 1 befindet, auf Host 2 zu über­tra­gen.
  2. SCP öffnet jeweils eine SSH-Ver­bin­dung zu Host 1 und Host 2.
  3. Die Datei wird von Host 1 über das lokale System geleitet und zu Host 2 über­tra­gen.

In diesem Fall müssen die öf­fent­li­chen SSH-Schlüssel des Nutzers auf Host 1 und Host 2 hin­ter­legt sein. In vielen An­wen­dungs­sze­na­ri­en dürfte dies ohnehin gegeben sein, z. B. wenn es sich beim Nutzer um einen Ad­mi­nis­tra­tor handelt, der Zugriff auf beide Hosts hat.

Syntax des Linux-SCP-Befehls

Die Syntax eines Kom­man­do­zei­len­be­fehls definiert, wie der Befehl ein­ge­ge­ben werden muss, um korrekt aus­ge­führt werden zu können. Wir zeigen die Syntax des SCP-Befehls hier sche­ma­tisch. Das grund­le­gen­de Muster bei der Nutzung des SCP-Befehls ori­en­tiert sich an der Syntax des CP-Befehls, der zum Kopieren von Dateien auf dem lokalen System zum Einsatz kommt: eine unter einem Quellpfad be­find­li­che Datei wird zu einem Zielpfad kopiert. Dabei können dem Quellpfad nach Bedarf einige Optionen vor­an­ge­stellt werden:

scp <Optionen> <Quellpfad> <Zielpfad>

Um Dateien von, zu oder zwischen ent­fern­ten Systemen zu kopieren, werden der Quell- oder der Zielpfad oder beide durch eine kom­ple­xe­re Pfad­an­ga­be ersetzt. Eine solche Pfad­an­ga­be enthält den Netz­werk­na­men bzw. die IP-Adresse des Hosts sowie den Namen des Nutzers, der auf den Host zugreifen möchte:

<Nutzer>@<Host>:<Verzeichnis/Datei.Endung>

Wir stellen im Folgenden die '<Nutzer>@<Host>'-Angabe bei­spiel­haft als 'nutzer@example.com' (für Host 1) bzw. 'nutzer@www.example.com' (für Host 2) dar.

Optionen des Linux-SCP-Befehls

Wie bei Kom­man­do­zei­len-Tools üblich, wird die Funk­ti­ons­wei­se des SCP-Befehls über ver­schie­de­ne Optionen gesteuert. Wir zeigen hier eine Auswahl der nütz­lichs­ten Optionen:

Option Bedeutung Kommentar
-C Kom­pres­si­on nutzen (com­pres­si­on) Nicht mit Option '-c' (cipher) ver­wech­seln, die Ver­schlüs­se­lungs­ver­fah­ren setzt
-p Datei-Attribute auf Ziel­da­tei­en über­tra­gen (per­mis­si­ons) Nicht mit Option '-P' ver­wech­seln, die den Netzwerk-Port setzt
-r Ver­zeich­nis­se rekursiv kopieren (recursive) -
-v Er­wei­ter­te Ausgabe anzeigen (verbose) -
-q Ausgabe un­ter­drü­cken (quiet) -
-3 Daten durch lokales System senden (third party) -
Tipp

Für eine aus­führ­li­che Be­schrei­bung aller ver­füg­ba­ren Optionen greifen Sie auf die Manpage des SCP-Befehls zurück.

Beispiele für die Nutzung des Linux-SCP-Befehls

Der SCP-Befehl ist viel­fäl­tig ein­setz­bar und lässt sich auf der Kom­man­do­zei­le mit den bekannten Mustern zur Angabe von Dateien und Ver­zeich­nis­sen kom­bi­nie­ren. An­ge­sichts der Breite der möglichen Ein­satz­sze­na­ri­en prä­sen­tie­ren wir hier nur einige typische Fälle. Beachten Sie, dass heut­zu­ta­ge andere Tools dem SCP-Befehl vor­ge­zo­gen werden, um Dateien im Netzwerk zu kopieren.

Eine Datei vom lokalen zum ent­fern­ten System kopieren

Um eine Datei 'datei.txt' vom aktuellen Ver­zeich­nis im lokalen System auf den Host 'example.com' zu kopieren, nutzen wir den folgenden SCP-Aufruf. Beachten Sie, dass wir hier si­mu­lie­ren, als Nutzer mit Namen 'nutzer' Login-Zugriff auf den Host 'example.com' zu haben.

scp datei.txt nutzer@example.com:/pfad/zum/verzeichnis

Nach er­folg­rei­chem Ko­pier­vor­gang befindet sich auf dem Host im Ver­zeich­nis '/pfad/zum/ver­zeich­nis' die Datei 'datei.txt'.

Eine Datei vom ent­fern­ten zum lokalen System kopieren

Um die Richtung des Ko­pier­vor­gangs um­zu­dre­hen, ver­tau­schen wir einfach den lokalen und den ent­fern­ten Pfad. Im ersten Beispiel nutzen wir den Punkt '.', um als Ziel das aktuelle Ver­zeich­nis anzugeben:

scp nutzer@example.com:/pfad/zum/verzeichnis/datei.txt

Hier zeigen wir eine Ab­wand­lung des ersten Beispiels und kopieren die Datei in den Ordner 'Desktop' im Nut­zer­ord­ner, wobei dieser durch die Tilde '~' sym­bo­li­siert wird. Beachten Sie bei Nutzung der Tilde, dass dabei der lokale Be­nut­zer­ord­ner sub­sti­tu­iert wird. Um Fehlern vor­zu­beu­gen, sollte ein Pfad mit Tilde von An­füh­rungs­zei­chen um­schlos­sen sein:

scp nutzer@example.com:/pfad/zum/verzeichnis/datei.txt "~/Desktop/"

Möchten wir die Datei kopieren und unter einem anderen Namen speichern, geben wir den neuen Namen am Ende des Zielpfads an:

scp nutzer@example.com:/pfad/zum/verzeichnis/datei.txt "~/Desktop/datei.bak"

Mehrere Dateien kopieren

Sofern Ihnen die Nutzung des CP-Befehls geläufig ist, vermuten Sie viel­leicht bereits, dass wir mit dem SCP-Befehl auch mehrere Dateien kopieren können. Der ein­fachs­te Weg, dies zu tun, besteht darin, die Dateien einzeln auf­zu­lis­ten. Im folgenden Beispiel befinden sich die an­ge­ge­be­nen Dateien im aktuellen Ver­zeich­nis; wir sparen uns daher die Angabe des Pfads zu jeder einzelnen Datei:

scp datei-1.txt datei-2.txt nutzer@example.com:/pfad/zum/verzeichnis

Vorsicht gilt bei der Nutzung von „Wildcards“ und „Globs“ wie '?' und '*'. Auch wenn diese es kom­for­ta­bel machen, Muster in Da­tei­na­men kompakt wie­der­zu­ge­ben, können sie bei Nutzung im Host-Pfad zu un­er­war­te­ten Fehlern führen. Verwenden Sie in diesen Fällen besser eine Schleife, wie in unserem Beispiel „Dateien auf ein ent­fern­tes System ver­schie­ben“ gezeigt, oder greifen Sie auf ein al­ter­na­ti­ves Tool zurück.

Ein gesamtes Ver­zeich­nis kopieren

Wie vom CP-Befehl gewohnt, kann rekursiv ein gesamtes Ver­zeich­nis kopiert werden. Wir geben dafür vor dem Quellpfad die Option '-r' an.

scp -r verzeichnis nutzer@example.com:/pfad/zum/verzeichnis

Nach er­folg­rei­cher Aus­füh­rung werden sich alle im Ver­zeich­nis 'ver­zeich­nis' be­find­li­chen Dateien und Un­ter­ver­zeich­nis­se als Kopie auf dem Host unter dem Pfad '/pfad/zum/ver­zeich­nis' wie­der­fin­den.

Zum Transfer größerer Dateien ist es sinnvoll, die Option '-C' zu nutzen, die die Dateien für den Transfer kom­pri­miert:

scp -C -r verzeichnis nutzer@example.com:/pfad/zum/verzeichnis
Hinweis

Beachten Sie, dass SCP immer alle Dateien komplett trans­fe­riert. Bricht der Transfer ab, muss wieder ganz von vorne begonnen werden. Zum Kopieren großer Ver­zeich­nis­se oder bei wa­cke­li­ger Netz­werk­ver­bin­dung ist es sinnvoll, ein al­ter­na­ti­ves Tool ein­zu­set­zen.

Eine Datei zwischen zwei ent­fern­ten Systemen kopieren

Um eine Datei zwischen zwei Hosts zu kopieren, nutzen wir den SCP-Befehl ohne Angabe eines lokalen Pfads. Quell- und Zielpfad müssen die Angaben zu Nutzer und Host enthalten:

scp nutzer@example.com:/pfad/zum/verzeichnis/datei.txt nutzer@www.example.com:/pfad/zum/anderen/verzeichnis

Wie eingangs angemerkt, ist es oft besser, den Transfer über das eigene System zu leiten. Wir nutzen dafür die Option '-3', die dem Quellpfad vor­an­ge­stellt wird:

scp -3 nutzer@example.com:/pfad/zum/verzeichnis/datei.txt nutzer@www.example.com:/pfad/zum/anderen/verzeichnis

Dateien auf ein ent­fern­tes System ver­schie­ben

Ein kom­ple­xe­res Szenario für den Einsatz des SCP-Befehls ist das Ver­schie­ben lokaler Daten auf einen Host. Dies kann z. B. zum Einsatz kommen, um ein ent­fern­tes Backup lokal nicht weiter be­nö­tig­ter Dateien anzulegen. Analog zur Un­ter­schei­dung der lokalen Befehle 'cp' („Copy“, Kopieren) und 'mv' („Move“, Ver­schie­ben) bietet der SCP-Befehl keine ei­gen­stän­di­ge Option für das Ver­schie­ben einer Datei. Wir können dies jedoch mit gängigen Methoden einfach selbst rea­li­sie­ren.

Be­trach­ten wir zunächst die Ver­schie­ben-Operation; diese setzt sich aus Kopieren und an­schlie­ßen­dem Löschen zusammen. Diese Abfolge von Ope­ra­tio­nen rea­li­sie­ren wir auf der Kom­man­do­zei­le durch Kom­bi­nie­ren der Befehle 'scp' und 'rm', wobei letzterer zum Löschen einer Linux-Datei dient. Wir verketten die Befehle mit dem logischen AND-Operator '&&', sodass der zweite Befehl nur dann aus­ge­führt wird, wenn der erste er­folg­reich war. Somit stellen wir sicher, dass die Kopie auf dem Host angelegt wurde, bevor das lokale Original gelöscht wird.

Zu guter Letzt nutzen wir eine 'for'-Schleife, um alle im aktuellen Ver­zeich­nis be­find­li­chen Dateien zu pro­zes­sie­ren. Optional geben wir dabei ein Muster an, um nur bestimmte Dateien oder Da­tei­ty­pen ein­zu­schlie­ßen. Da wir ein exaktes Backup jeder einzelnen Datei anlegen möchten, nutzen wir die Option '-p', um auch die Da­tei­at­tri­bu­te zu kopieren. Da es sich beim Anlegen eines Backups um einen kri­ti­schen Prozess handelt, weisen wir den SCP-Befehl mit der Option '-v' an, zu­sätz­li­che Sta­tus­in­for­ma­tio­nen aus­zu­ge­ben.

for datei in ./muster*.endung ; do scp -p -v "$datei" nutzer@example.com:"/backup/${datei}.bak" && rm "$datei" ; done

Al­ter­na­ti­ven zum Linux-SCP-Befehl

Auch wenn SCP auf fast allen Systemen verfügbar ist, ist die Software längst nicht mehr die be­vor­zug­te Methode, um Dateien im Netzwerk zu kopieren. Auf diesen Umstand weisen selbst die Ent­wick­ler des OpenSSH-Projekts hin, das SCP be­her­bergt.

Die von den SCP-Main­tai­nern genannten Al­ter­na­ti­ven SFTP (Secure File Transfer Protocol) und Rsync (Remote Sync) nutzen ebenfalls SSH für den ver­schlüs­sel­ten Zugriff auf den ent­fern­ten Host. Beide Programme bieten einen höheren Umfang an Funk­tio­na­li­tät und werden aktiv wei­ter­ent­wi­ckelt. Der einzige ernst­zu­neh­men­de Nachteil dieser Tools ist, dass sie ggf. zunächst in­stal­liert werden müssen, wo­hin­ge­gen SCP auf so gut wie allen Systemen vor­in­stal­liert ist. Schauen wir uns die beiden Al­ter­na­ti­ven etwas genauer an.

Bei SFTP handelt es sich quasi um den direkten Nach­fol­ger von SCP. Der Da­ten­trans­fer ist ga­ran­tiert ver­schlüs­selt und nutzt die be­stehen­de SSH-In­fra­struk­tur. Das bedeutet im prak­ti­schen Einsatz, dass mit SFTP auf die ent­fern­ten Da­tei­sys­te­me von Hosts zu­ge­grif­fen werden kann, für die vom lokalen System aus SSH-Zugriff besteht. Das SFTP-Protokoll bietet einen weitaus höheren Funk­ti­ons­um­fang als SCP. Trans­fe­rier­te Daten werden au­to­ma­tisch auf Kor­rekt­heit überprüft und ab­ge­bro­che­ne Transfers lassen sich wei­ter­füh­ren.

Mit Rsync steht ein weiteres mächtiges Tool zur Verfügung, das alle Aufgaben von SCP über­neh­men kann. Dabei handelt es sich bei Rsync nicht um einen Ko­pier­be­fehl im ei­gent­li­chen Sinne. Das Tool kann weitaus mehr und ist ins­be­son­de­re für den ef­fi­zi­en­ten Transfer großer Dateien und Da­ten­men­gen ausgelegt. Dazu ver­gleicht Rsync die auf Quelle und Ziel vor­han­de­nen Daten und überträgt nur die Differenz. Bricht ein Transfer ab und wird neu­ge­star­tet, muss nicht von vorne begonnen werden.

Fazit

Sofern auf Ihrem System vorhanden, sollten Sie anstelle von SCP die Tools SFTP oder Rsync nutzen, um Dateien im Netzwerk zu kopieren.

Zum Hauptmenü