scp-Befehl – Sichere Kopie

Scp (Secure Copy) ist ein Befehlszeilentool zum Kopieren oder Übertragen von Dateien zwischen Hosts. Es verwendet die gleichen Sicherheitsmechanismen wie das Programm ssh.

In der Tat verwendet es eine ssh-Verbindung im Hintergrund, um den Dateitransfer durchzuführen. scp bezieht sich sowohl auf das „Protokoll“, das definiert, wie Secure Copy funktionieren soll, als auch auf das „Programm“ (Befehl), das als Teil der OpenSSH-Suite von Tools installiert ist.

In diesem kurzen Tutorial werden wir uns ein paar Beispiele für den scp-Befehl ansehen und wie er verwendet werden kann, um Dateien sicher zu übertragen.

Wie man scp installiert

Scp wird in der Regel standardmäßig auf den meisten Linux-Distributionen als Teil der openssh-Pakete installiert. Auf Ubuntu/Debian zum Beispiel stellt das openssh-client-Paket das scp-Programm zur Verfügung.

$ dpkg -L openssh-client | grep scp/usr/bin/scp/usr/share/man/man1/scp.1.gz

Es ist das OpenSSH-Paket, das die ssh-, scp- und sftp-Programme zusammen mit vielen anderen Tools bereitstellt. Wir müssen hier also nichts extra tun, außer das Programm zu benutzen und zu lernen.

Scp benutzen – grundlegende Syntax

Die grundlegende Syntax von scp ist sehr einfach zu merken. Sie sieht wie folgt aus

$ scp source_file_path destination_file_path

Abhängig vom Host sollte der Dateipfad die vollständige Hostadresse, die Portnummer, den Benutzernamen und das Passwort zusammen mit dem Verzeichnispfad enthalten.

Wenn Sie also eine Datei von Ihrem lokalen Rechner zu einem entfernten Rechner „senden“ (hochladen), sieht die Syntax wie folgt aus

$ scp ~/my_local_file.txt _host.com:/some/remote/directory

Wenn Sie eine Datei von einem entfernten Rechner zu einem lokalen Rechner kopieren (herunterladen), sieht es genau umgekehrt aus

$ scp _host.com:/some/remote/directory ~/my_local_file.txt# just download the file$ scp :/some/path/file.txt .

Das ist so ziemlich alles über die Verwendung von scp für normale Aufgaben. Abgesehen davon gibt es eine Reihe von zusätzlichen Optionen und Funktionen, die scp unterstützt. Lassen Sie uns einen kurzen Überblick über diese geben.

Und ja, standardmäßig überschreibt scp immer Dateien am Zielort. Wenn Sie das vermeiden wollen, verwenden Sie ein leistungsfähigeres Werkzeug namens rsync.

scp Befehlsbeispiele

1. Ausführliche Ausgabe

Mit der ausführlichen Ausgabe würde das scp-Programm viele Informationen darüber ausgeben, was es im Hintergrund tut. Dies ist oft nützlich, wenn das Programm fehlschlägt oder die Anfrage nicht abschließen kann. Die ausführliche Ausgabe würde dann den genauen Punkt angeben, an dem das Programm Probleme hatte.

$ scp -v ~/test.txt :/root/help2356.txtExecuting: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txtOpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013debug1: Reading configuration data /home/enlightened/.ssh/configdebug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: Applying options for *debug1: Connecting to 192.168.1.3 port 22.debug1: Connection established...... OUTPUT TRUNCATED

Die Ausgabe wäre sehr umfangreich und würde detaillierte Informationen darüber enthalten, wie die Verbindung hergestellt wird, welche Konfigurations- und Identitätsdateien verwendet werden und so weiter.

2. mehrere Dateien übertragen

Mehrere Dateien können durch ein Leerzeichen getrennt wie folgt angegeben werden

$ scp foo.txt bar.txt :/path/directory/

Um mehrere Dateien vom entfernten Host in das aktuelle lokale Verzeichnis zu kopieren

$ scp :/path/directory/\{foo.txt,bar.txt\} .$ scp :~/\{abc.log,cde.txt\} .

3. Kopieren eines ganzen Verzeichnisses (rekursiv)

Um ein ganzes Verzeichnis von einem Host zu einem anderen zu kopieren, verwenden Sie den Schalter r und geben Sie das Verzeichnis an

$ scp -v -r ~/Downloads :/root/Downloads

4. Kopieren von Dateien über 2 Remote-Hosts

Scp kann auch Dateien von einem Remote-Host zu einem anderen Remote-Host kopieren.

$ scp :/some/remote/dir/foobar.txt :/some/remote/dir/

5. Beschleunigen Sie die Übertragung mit Kompression

Eine super coole Option, um die Übertragung zu beschleunigen und Zeit und Bandbreite zu sparen. Sie brauchen nur die Option C zu verwenden, um die Komprimierung zu aktivieren. Die Dateien werden während der Übertragung komprimiert und am Zielort dekomprimiert.

$ scp -vrC ~/Downloads :/root/Downloads

Im obigen Beispiel haben wir das gesamte Verzeichnis mit aktivierter Komprimierung verschoben. Der Geschwindigkeitsgewinn hängt davon ab, wie stark die Dateien komprimiert werden können.

6. Begrenzen Sie die Bandbreitennutzung

Wenn Sie nicht wollen, dass scp die gesamte verfügbare Bandbreite in Anspruch nimmt, dann verwenden Sie die Option l, um die maximale Geschwindigkeit in Kbit/s zu begrenzen.

$ scp -vrC -l 400 ~/Downloads :/root/Downloads

7. Verbindung zu einer anderen Portnummer auf dem entfernten Host herstellen

Wenn der entfernte Server einen ssh-Daemon hat, der auf einem anderen Port läuft (Standard ist 22), dann müssen Sie scp mit der Option ‚-P‘ anweisen, diese bestimmte Portnummer zu benutzen.

$ scp -vC -P 2200 ~/test.txt :/some/path/test.txt

8. Dateiattribute beibehalten

Die Option ‚-p‘ (Kleinbuchstaben) würde Änderungszeiten, Zugriffszeiten und Modi der Originaldatei beibehalten.

$ scp -C -p ~/test.txt :/some/path/test.txt

9. Ruhiger Modus

Im ruhigen Modus (Option ‚-q‘) wird die scp-Ausgabe unterdrückt und die Fortschrittsanzeige sowie die Warn- und Diagnosemeldungen werden deaktiviert.

$ scp -vCq ~/test.txt :/some/path/test.txt

10. Identitätsdatei angeben

Wenn Sie eine schlüsselbasierte (passwortlose) Authentifizierung verwenden, müssen Sie die Identitätsdatei angeben, die den privaten Schlüssel enthält. Diese Option wird direkt an den ssh-Befehl übergeben und funktioniert auf die gleiche Weise.

$ scp -vCq -i private_key.pem ~/test.txt :/some/path/test.txt

11. Use a different ssh_config file

Verwenden Sie die Option ‚-F‘, um eine andere ssh_config-Datei anzugeben.

$ scp -vC -F /home/user/my_ssh_config ~/test.txt :/some/path/test.txt

12. Use different cipher

Scp verwendet standardmäßig die AES-Chiffre/Verschlüsselung. Manchmal möchten Sie vielleicht eine andere Verschlüsselung verwenden. Die Verwendung einer anderen Verschlüsselung kann den Übertragungsprozess beschleunigen. Blowfish und Arcfour beispielsweise sind bekanntermaßen schneller als AES (aber weniger sicher).

$ scp -c blowfish -C ~/local_file.txt :/remote/path/file.txt

Im obigen Beispiel verwenden wir die Blowfish-Chiffre zusammen mit einer Komprimierung. Dies kann je nach verfügbarer Bandbreite zu einem erheblichen Geschwindigkeitszuwachs führen.

Zusammenfassung

Obwohl scp sehr effizient bei der sicheren Übertragung von Dateien ist, fehlen ihm die notwendigen Funktionen eines Tools zur Dateisynchronisation. Alles, was es kann, ist das Kopieren und Einfügen aller erwähnten Dateien von einem Ort zu einem anderen.

Ein leistungsfähigeres Tool ist Rsync, das nicht nur alle Funktionen von scp hat, sondern noch weitere Funktionen hinzufügt, um Dateien auf intelligente Weise zwischen zwei Hosts zu synchronisieren. Zum Beispiel kann es nur die geänderten Dateien prüfen und hochladen, vorhandene Dateien ignorieren usw.