Linux-Administratoren sollten mit der Kommandozeilenumgebung vertraut sein. Da GUI (Grafische Benutzeroberfläche) in Linux-Servern nicht üblich ist, um installiert zu sein.
SSH könnte das beliebteste Protokoll sein, um Linux-Administratoren dabei zu unterstützen, die Server auf sichere Weise von einem entfernten Standort aus zu verwalten. Inbegriffen mit dem SSH-Befehl gibt es den SCP-Befehl, der verwendet wird, um Dateien zwischen Servern zu kopieren auf sichere Weise.
Grundlegende Syntax des SCP-Befehls
Der folgende Befehl wird als Kopie von „Quelldateiname“ in „Zieldatei“ auf „Zielhost“ unter Verwendung des Kontos „Benutzername“ gelesen.
scp source_file_name username@destination_host:destination_folder
Es gibt viele Parameter im SCP-Befehl, die Sie verwenden können. Hier sind die Parameter, die Sie möglicherweise im täglichen Gebrauch verwenden.
Inhaltsverzeichnis
Dateien sicher übertragen in Linux
Der grundlegende SCP-Befehl ohne Parameter kopiert die Dateien im Hintergrund. Benutzer werden nichts sehen, es sei denn, der Vorgang ist abgeschlossen oder ein Fehler tritt auf.
Sie können den Parameter “-v
” verwenden, um Debug-Informationen auf den Bildschirm auszugeben. Dies kann bei der Fehlersuche von Verbindungs-, Authentifizierungs- und Konfigurationsproblemen helfen.
Datei von lokalem Host auf Remote-Server kopieren
Die folgende Befehlszeile kopiert eine Datei „scp-cheatsheet.pdf“ von einem lokalen System auf ein entferntes Linux-System unter dem Verzeichnis /home/tecmint.
$ scp -v scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Beispielausgabe:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/. OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_xmss type -1 ...
Dateikopie von einem Remote-Host auf ein lokales System
Die folgende Befehlszeile kopiert eine Datei „ssh-cheatsheet.pdf“ von einem Remote-Host auf ein lokales System unter dem Verzeichnis /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
Beispielausgabe:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 ...
Dateikopie von einem Remote-Host auf ein anderes Remote-Host-System
Die folgende Befehlszeile kopiert eine Datei „ssh-cheatsheet.pdf“ von einem Remote-Host auf ein anderes Remote-Host-System unter dem Verzeichnis /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf [email protected]:/home/anusha/.
Dateikopie mit ursprünglicher Erstellungszeit und -datum
Der Parameter „-p
“ bewahrt die ursprünglichen Änderungs- und Zugriffszeiten der Dateien bei der Dateikopie auf, zusammen mit der geschätzten Zeit und der Verbindungsgeschwindigkeit, die auf dem Bildschirm erscheinen wird.
$ scp -p scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Beispielausgabe:
[email protected]'s password: scp-cheatsheet.pdf 100% 531 721.4KB/s 00:00
Scp-Komprimierung beim Kopieren von Dateien
Eines der Parameter, die den Dateiübertragungsprozess beschleunigen können, ist der „-C
„-Parameter, der dazu verwendet wird, Ihre Dateien während des Transfers zu komprimieren. Das Besondere daran ist, dass die Komprimierung nur im Netzwerk stattfindet. Sobald die Datei am Zielserver angekommen ist, wird sie wieder auf ihre ursprüngliche Größe zurückkehren, bevor die Komprimierung stattgefunden hat.
Schauen Sie sich diese Befehle an. Es wird eine einzelne Datei von 93 Mb verwendet.
$ scp -pv messages.log [email protected]:.
Beispielausgabe:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: Sending command: scp -v -p -t. File mtime 1323853868 atime 1380425711 Sending file timestamps: T1323853868 0 1380425711 0 messages.log 100% 93MB 58.6KB/s 27:05 Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds Bytes per second: sent 58758.4, received 15.6 debug1: Exit status 0
Das Kopieren von Dateien ohne den „-C
„-Parameter führt zu einer Übertragungsdauer von 1661,3 Sekunden. Sie können das Ergebnis mit dem Befehl unten vergleichen, der den „-C"
„-Parameter verwendet.
$ scp -Cpv messages.log [email protected]:.
Beispielausgabe:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Host '202.x.x.x' is known and matches the RSA host key. debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Next authentication method: publickey debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Enabling compression at level 6. debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: channel 0: new [client-session] debug1: Sending command: scp -v -p -t . File mtime 1323853868 atime 1380428748 Sending file timestamps: T1323853868 0 1380428748 0 Sink: T1323853868 0 1380428748 0 Sending file modes: C0600 97517300 messages.log messages.log 100% 93MB 602.7KB/s 02:38 Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds Bytes per second: sent 54813.9, received 97.0 debug1: Exit status 0 debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09 debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
Wie Sie sehen können, wird der Übertragungsprozess mit Komprimierung in 162,5 Sekunden abgeschlossen. Das ist 10 Mal schneller als ohne den „-C
„-Parameter. Wenn Sie viele Dateien über das Netzwerk kopieren, würde der „-C
„-Parameter Ihnen helfen, die insgesamt benötigte Zeit zu reduzieren.
Wichtig zu beachten ist, dass die Komprimierungsmethode nicht für alle Dateien funktioniert. Wenn die Quelldatei bereits komprimiert ist, wird dort keine Verbesserung festzustellen sein. Dateien wie .zip, .rar, Bilder und .iso werden vom „-C
„-Parameter nicht betroffen sein.
Ändern des SCP-Verschlüsselungsalgorithmus zum Schutz von Dateien
Standardmäßig verwendet SCP “AES-128” zur Verschlüsselung von Dateien. Wenn Sie einen anderen Algorithmus zum Verschlüsseln verwenden möchten, können Sie das “-c
”-Argument verwenden.
Schauen Sie sich diesen Befehl an.
$ scp -c 3des Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Der obige Befehl weist SCP an, den 3des-Algorithmus zum Verschlüsseln der Datei zu verwenden. Achten Sie darauf, dass das Argument mit “-c
” und nicht mit “-C
” verwendet wird.
Begrenzung des Bandbreitengebots mit dem SCP-Befehl
Ein weiteres nützliches Argument ist das “-l
”-Argument. Das “-l”-Argument begrenzt die Bandbreite, die verwendet werden soll. Es kann nützlich sein, wenn Sie einen Automatisierungsscript verwenden, um viele Dateien zu kopieren, aber die Bandbreite nicht durch den SCP-Prozess aufgebraucht haben möchten.
$ scp -l 400 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 50.3KB/s 01:13
Der 400-Wert hinter dem “-l
”-Argument bedeutet, dass wir die Bandbreite für den SCP-Prozess auf nur 50 KB/s begrenzen.
Eine wichtige Sache zu beachten ist, dass die Bandbreite in Kilobits/s (kbps) angegeben wird. Das bedeutet, dass 8 Bits gleich 1 Byte sind.
Während SCP in Kilobyte/Sekunde (KB/s) zählt. Wenn Sie also Ihre Bandbreite auf ein SCP-Maximum von nur 50 KB/s begrenzen möchten, müssen Sie es auf 50 x 8 = 400 setzen.
SCP mit einem anderen Port
Normalerweise verwendet SCP den Port 22 als Standardport, aber aus Sicherheitsgründen können Sie den Port möglicherweise in einen anderen Port ändern. Zum Beispiel verwenden wir den Port 2249.
Dann sollte der Befehl so aussehen.
$ scp -P 2249 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 262.3KB/s 00:14
Stellen Sie sicher, dass es ein großes “P
” verwendet und nicht ein “p
”, da “p
” bereits für erhaltene Zeiten und Modi verwendet wird.
SCP – Dateien und Verzeichnisse rekursiv kopieren
Manchmal müssen wir das Verzeichnis und alle Dateien/Verzeichnisse darin kopieren. Es wäre besser, wenn wir dies mit einem einzigen Befehl mit dem “-r
”-Parameter tun könnten, der das gesamte Verzeichnis rekursiv kopiert.
$ scp -r documents [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13 scp.txt 100% 10KB 9.8KB/s 00:00
Wenn der Kopierprozess abgeschlossen ist, finden Sie auf dem Zielserver ein Verzeichnis namens “Dokumente” mit all seinen Dateien. Das Ordner “Dokumente” wird automatisch erstellt.
SCP – Deaktivieren von Fortschrittsmeldungen
Wenn Sie die Fortschrittsanzeige und Warn- / Diagnosemeldungen von SCP nicht sehen möchten, können Sie sie mithilfe des Parameters „-q
“ deaktivieren. Hier ist ein Beispiel.
$ scp -q Label.pdf [email protected]:. [email protected]'s password: pungki@mint ~/Documents $
Wie Sie sehen, gibt es nach Eingabe des Passworts keine Informationen zum SCP-Prozess. Nach Abschluss des Prozesses erhalten Sie erneut eine Eingabeaufforderung.
SCP – Dateien über Proxy kopieren
Proxy-Server werden normalerweise im Büro-Umfeld verwendet. Nativ ist SCP nicht für den Einsatz eines Proxys konfiguriert. Wenn Ihre Umgebung einen Proxy verwendet, müssen Sie SCP „sagen“, dass es mit dem Proxy kommunizieren soll.
Hier ist die Situation. Die Proxy-Adresse lautet 10.0.96.6 und der Proxy-Port ist 8080. Der Proxy verwendet auch die Benutzerauthentifizierung. Zuerst müssen Sie die Datei „~/.ssh/config“ erstellen. Zweitens fügen Sie diesen Befehl hinein.
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
Dann müssen Sie die Datei „~/.ssh/proxyauth“ erstellen, die folgendes enthält.
myusername:mypassword
Danach können Sie SCP wie gewohnt durchführen.
Bitte beachten Sie, dass das corkscrew möglicherweise noch nicht auf Ihrem System installiert ist. Auf meinem Linux Mint muss ich es zuerst installieren, indem ich die standardmäßige Linux Mint-Installationsprozedur verwende.
$ apt-get install corkscrew
Für andere yum-basierte Systeme können Benutzer corkscrew mithilfe des folgenden yum-Befehls installieren.
# yum install corkscrew
Ein weiterer Punkt ist, dass da der “~/.ssh/proxyauth”-Datei Ihr “Benutzername” und Ihr “Passwort” im Klartextformat enthalten ist, stellen Sie bitte sicher, dass die Datei nur von Ihnen zugänglich ist.
Wählen Sie eine andere ssh_config-Datei
Für mobile Benutzer, die häufig zwischen Unternehmensnetzwerken und öffentlichen Netzwerken wechseln, ist es beschwerlich, die Einstellungen in SCP immer wieder ändern zu müssen. Es wäre besser, wenn wir eine andere ssh_config-Datei erstellen könnten, die unseren Bedürfnissen entspricht.
Proxy wird im Unternehmensnetzwerk verwendet, aber nicht im öffentlichen Netzwerk, und Sie wechseln regelmäßig zwischen Netzwerken.
$ scp -F /home/pungki/proxy_ssh_config Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Standardmäßig wird die “ssh_config”-Datei pro Benutzer im “~/.ssh/config“ platziert. Die Erstellung einer spezifischen “ssh_config”-Datei mit Proxy-Kompatibilität erleichtert den Wechsel zwischen Netzwerken.
Wenn Sie sich im Unternehmensnetzwerk befinden, können Sie den “-F
”-Parameter verwenden. Wenn Sie sich in einem öffentlichen Netzwerk befinden, können Sie den “-F
”-Parameter weglassen.
Das war’s für SCP. Sie können die Manpages von SCP für weitere Details ansehen. Gerne können Sie Kommentare und Vorschläge hinterlassen.