So verwenden Sie den scp-Befehl unter Linux

Veröffentlicht: 2022-06-28
Linux-Terminal auf einem Laptop-Bildschirm.
fatmawati achmad zaenuri/Shutterstock.com

Der Befehl scp macht das Kopieren von Dateien zwischen Linux-Computern einfach und sicher. Es verwendet SSH-Sicherheit, aber das Beste ist, dass es einfach ist. Wenn Sie cp verwenden können, können Sie scp verwenden.

Das Secure Copy Protocol und scp

Lassen Sie uns ein paar Begriffe definieren: Es gibt SCP und es gibt scp . Der Großbuchstabe SCP steht für das Secure Copy Protocol. Der Kleinbuchstabe scp steht für secure cp . Mit anderen Worten, SCP ist ein Protokoll und scp ist ein Programm.

scp wurde als sicheres Mittel zum Kopieren von Dateien zwischen Remote-Linux-Computern entwickelt. Es verwendet SSH, um sichere Verbindungen herzustellen. SSH oder Secure Shell ist ein kryptografisches Netzwerkprotokoll, das häufig für den Zugriff auf und die Anmeldung bei Remote-Linux-Computern verwendet wird. Auf Linux-Distributionen wird die SSH-Funktionalität von OpenSSH bereitgestellt.

So richten Sie Remotedesktop unter Ubuntu ein
RELATED So richten Sie Remote Desktop unter Ubuntu ein

SCP ist etwas in die Jahre gekommen, und es wurden Bedenken hinsichtlich seiner Verwendung in der heutigen Zeit geäußert. Seit OpenSSH Version 8.8 gilt SCP als veraltet. Moderne Implementierungen von scp verwenden standardmäßig das Secure File Transfer Protocol. SSH wird weiterhin für die sichere Verbindung verwendet, aber die Dateiübertragungen werden von SFTP abgewickelt. Dies alles ist unsichtbar und passiert auf magische Weise unter der Haube, und die scp Syntax ist gleich geblieben.

Das rsync -Programm wird gegenüber scp bevorzugt, aber Sie können auf einen Computer stoßen, auf dem rsync nicht installiert ist und für den Sie keine Root-Rechte haben, was bedeutet, dass Sie es nicht installieren können. Zum Kopieren von Dateien von Computer zu Computer in einem eigenständigen Netzwerk ist scp vollkommen in Ordnung. Damit scp funktioniert, muss SSH auf allen Computern laufen, auf die und von denen kopiert wird.

Geben Sie Folgendes ein, um die auf Ihrem Computer installierte Version von OpenSSH anzuzeigen:

 ssh-V 

Abrufen der Version von OpenSSH

Kopieren einer einzelnen Datei

Wie der Standardbefehl cp kopiert scp Dateien vom Quellspeicherort zum Zielspeicherort . Um eine Datei auf einen Remote-Computer zu kopieren, müssen Sie die IP-Adresse oder den Netzwerknamen des Remote-Computers kennen. Sie müssen auch über die Anmeldeinformationen für ein Benutzerkonto verfügen, das über Schreibrechte für den Speicherort verfügt, an den Sie die Datei senden.

Um eine Datei namens „sample.txt“ an einen Computer namens „fedora-34“ im lokalen Netzwerk zu senden, lautet die Syntax:

 scp ./sample.txt [email protected]:/home/dave/Downloads/ 

Kopieren einer einzelnen Datei auf einen entfernten Computer

Der Befehl besteht aus:

  • scp : Der scp-Befehl
  • ./sample.txt : Die Datei, die wir senden werden. Dies ist im aktuellen Verzeichnis.
  • dave@ : Das Benutzerkonto auf dem Remote-Computer, an den wir die Datei senden werden.
  • fedora-34.local : Der Netzwerkname des entfernten Computers.
  • :/home/dave/Downloads/ : Der Speicherort, an den die Datei auf dem Remote-Computer kopiert werden soll. Beachten Sie den Doppelpunkt „:“, der den Computernamen und den Pfad trennt.

Sie werden aufgefordert, das Passwort für das Konto auf dem Remote-Computer einzugeben, und dann wird die Datei kopiert.

Wenn Sie möchten, dass die Datei auf dem Remote-Computer einen anderen Namen hat, können Sie dem Zielpfad einen Dateinamen hinzufügen. Um dieselbe Datei zu kopieren und ihr den Namen „andere-datei.txt“ zu geben, verwenden Sie diese Syntax:

 scp ./sample.txt [email protected]:/home/dave/Downloads/different-file.txt 

Kopieren einer einzelnen Datei auf einen Remote-Computer mit einem neuen Namen

Der Befehl scp überschreibt vorhandene Dateien stillschweigend, seien Sie also vorsichtig, wenn Sie Dateien kopieren. Wenn auf dem Zielcomputer bereits eine Datei mit demselben Namen wie die zu kopierende Datei vorhanden ist, wird sie überschrieben und geht verloren.

Wenn der Zielcomputer nicht den Standard-SSH-Port 22 verwendet, können Sie die Option -P (Portnummer) verwenden, um die entsprechende Portnummer anzugeben.

Abrufen einer einzelnen Datei

Um eine Datei von einem entfernten Server zu kopieren, geben Sie einfach den entfernten Server als Quelle und den lokalen Pfad, wohin die Datei kopiert werden soll, als Ziel ein. Wir werden eine Datei namens „development-plan.md“ vom Remote-Computer in das aktuelle Verzeichnis auf dem lokalen Computer kopieren.

 scp [email protected]:/home/dave/Downloads/development-plan.md . 

Kopieren einer einzelnen Datei von einem Remote-Server in das aktuelle Verzeichnis des lokalen Computers

Wenn Sie dem lokalen Pfad einen Dateinamen hinzufügen, wird die Datei kopiert und erhält diesen Namen.

 scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md 

Kopieren einer einzelnen Datei von einem Remote-Server in das aktuelle Verzeichnis des lokalen Computers mit einem neuen Namen

Die Datei wird kopiert, aber in unseren angegebenen Dateinamen umbenannt.

 ls -hl *.md 

Kopieren mehrerer Dateien

Das Kopieren mehrerer Dateien in beide Richtungen ist einfach. Sie können beliebig viele Quelldateien auflisten. Hier kopieren wir zwei Markdown-Dateien und eine CSV-Datei.

 scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Downloads/ 

Kopieren mehrerer benannter Dateien auf einen Remote-Computer

Die drei Dateien werden auf den Remote-Computer kopiert. Sie können auch Platzhalter verwenden. Dieser Befehl macht genau dasselbe wie der letzte Befehl.

 scp ./dp . [email protected]:/home/dave/Downloads/ 

Kopieren mehrerer Dateien auf einen Remote-Computer mit Platzhaltern im Dateinamen

Rekursives Kopieren von Verzeichnissen

Mit der Option -r (rekursiv) können Sie ganze Verzeichnisbäume mit einem einzigen Befehl kopieren. Wir haben zwei Dateien in einem Verzeichnis namens „data“ abgelegt und ein Verzeichnis namens „CSV“ innerhalb des „data“-Verzeichnisses erstellt. Wir haben eine CSV-Datei im Verzeichnis „data/CSV“ abgelegt.

Dieser Befehl kopiert die Dateien und erstellt die Verzeichnisstruktur auf dem Remotecomputer neu.

 scp -r ./data [email protected]:/home/dave/Downloads/ 

Kopieren eines Verzeichnisbaums auf einen entfernten Computer

Kopieren von Dateien zwischen Remote-Servern

Sie können scp sogar anweisen, Dateien von einem entfernten Server auf einen anderen zu kopieren. Die Syntax ist ziemlich einfach. Sie geben den Kontonamen und die Netzwerkadresse des Quellservers und den Kontonamen und die Netzwerkadresse des Zielservers an. Die Dateien werden vom Quellserver kopiert und an den Speicherort auf dem Zielserver kopiert.

Obwohl die Syntax einfach ist, erfordert es etwas mehr Aufmerksamkeit, sicherzustellen, dass alles andere vorhanden ist. Offensichtlich muss der Speicherort, an den Sie versuchen, die Dateien auf dem Remote-Server zu kopieren, für das Benutzerkonto zugänglich sein, das Sie in der Befehlszeile angeben. Und dieses Benutzerkonto muss über Schreibberechtigungen für diesen Speicherort verfügen.

Eine subtilere Voraussetzung ist, dass zwischen Ihrem lokalen Computer und dem Quellcomputer sowie zwischen Quell- und Zielserver ein SSH-Zugriff eingerichtet werden muss. Stellen Sie sicher, dass Sie SSH verwenden können, um sich vom Quellserver beim Zielserver anzumelden. Wenn Sie dies nicht tun können, kann scp keine Verbindung herstellen.

So erstellen und installieren Sie SSH-Schlüssel aus der Linux-Shell
RELATED How to Create and Install SSH Keys From the Linux Shell

Das Einrichten von SSH-Schlüsseln, sodass Sie einen authentifizierten, aber passwortlosen Zugriff verwenden können, ist bei weitem die bevorzugte Methode. Die Verwendung von Passwörtern wird sehr schnell unübersichtlich und – da Sie zur Eingabe des Passworts für jedes Benutzerkonto aufgefordert werden – hindert es Sie daran, den Prozess mit einem Skript vollständig zu automatisieren.

Wir richten SSH-Schlüssel für die Benutzerkonten ein, die wir auf jedem Remote-Server verwenden. Dies ermöglichte diesen beiden Benutzern einen nahtlosen SSH-Zugriff auf den anderen Server. Auf diese Weise können wir Dateien in beide Richtungen übertragen, indem wir diese beiden Benutzerkonten verwenden.

Um Dateien vom „davem“-Benutzerkonto auf einem Manjaro-Computer über einen scp -Befehl, der von unserem lokalen Ubuntu-Computer ausgegeben wird, auf das „dave“-Konto auf einem Fedora-Computer zu kopieren, lautet die Syntax:

 scp [email protected]:/home/davem/man . [email protected]:/home/dave/ 

Kopieren von Dateien von einem Remote-Server auf einen anderen.

Wir kehren stillschweigend zur Befehlszeile zurück. Es gibt keinen Hinweis darauf, dass etwas passiert ist. Unter der Prämisse, dass keine Neuigkeiten gute Neuigkeiten sind, berichtet scp nur über Fehler für dieses Remote-zu-Remote-Kopieren. Beim Überprüfen des Fedora-Computers können wir sehen, dass die Dateien vom Manjaro-Computer kopiert und empfangen wurden.

Dateien vom Manjaro-Computer, die auf dem Fedora-Computer empfangen wurden

Standardmäßig werden die Dateien direkt vom Quellcomputer auf den Zielcomputer kopiert. Sie können dies mit der Option -3 (Dreiwege) überschreiben.

Mit dieser Option werden die Dateien über Ihren lokalen Computer vom Ziel zur Quelle übertragen. Dazu muss ein nahtloser SSH-Zugriff von Ihrem lokalen Computer auf den Zielcomputer bestehen.

 scp -3 [email protected]:/home/davem/man . [email protected]:/home/dave/ 

Kopieren von Dateien von einem Remote-Server auf einen anderen über den lokalen Computer

Es gibt immer noch keinen Hinweis darauf, dass etwas passiert ist, selbst wenn die Dateien über Ihren lokalen Computer geleitet werden. Der Beweis für den Pudding ist natürlich die Überprüfung des Zielcomputers.

Andere Optionen

Das -p (Dateiattribute beibehalten) behält die ursprünglichen Dateierstellungs-, Eigentums- und Zugriffs-Flags für die übertragenen Dateien bei. Sie haben die gleichen Metadaten wie die Originaldateien auf dem Quellcomputer.

Wenn Fehlermeldungen angezeigt werden, versuchen Sie, den Befehl zu wiederholen, und verwenden Sie das Flag -v (ausführlich), um detaillierte Informationen zum Übertragungsversuch anzuzeigen. Sie sollten in der Lage sein, den Fehlerpunkt in der Ausgabe zu erkennen.

Die Option -C (komprimieren) komprimiert die Dateien, während sie kopiert werden, und dekomprimiert sie, wenn sie empfangen werden. Dies ist etwas, das auf die Ära der langsamen modernen Kommunikation zwischen Computern zurückgeht. Die Verringerung der Größe der Nutzlast könnte die Übertragungszeiten verkürzen.

Heutzutage ist die Zeit, die zum Komprimieren und Dekomprimieren der Dateien benötigt wird, wahrscheinlich länger als die Differenz zwischen komprimierten und unkomprimierten Übertragungen. Da scp jedoch am besten zum Kopieren von Dateien zwischen Computern im selben LAN verwendet wird, sollte die Übertragungsgeschwindigkeit keine große Rolle spielen.

VERWANDT: So sichern Sie Ihr Linux-System mit rsync