Zoeken op website

SCP Linux Command – Bestanden veilig overbrengen in Linux


Linux-beheerders moeten bekend zijn met de opdrachtregelomgeving. Omdat de GUI-modus (Grafische gebruikersinterface) op Linux-servers niet gebruikelijk is om te worden geïnstalleerd.

SSH is wellicht het meest populaire protocol waarmee Linux-beheerders de servers op een veilige manier op afstand kunnen beheren. Ingebouwd in de SSH-opdracht is er de SCP-opdracht, die wordt gebruikt om bestanden op een veilige manier tussen servers te kopiëren.

Basissyntaxis van SCP-opdracht

De onderstaande opdracht luidt als kopie “source_file_name” naar “destination_folder” op “destination_host” met behulp van de “gebruikersnaam " rekening.

scp source_file_name username@destination_host:destination_folder

Er zijn veel parameters in de SCP-opdracht die u kunt gebruiken. Hier volgen de parameters die bij dagelijks gebruik kunnen worden gebruikt.

Veilig bestanden overbrengen in Linux

Met het standaard SCP commando zonder parameters worden de bestanden op de achtergrond gekopieerd. Gebruikers zullen niets zien tenzij het proces is voltooid of er een fout optreedt.

U kunt de parameter “-v” gebruiken om foutopsporingsinformatie op het scherm af te drukken. Het kan u helpen verbindings-, authenticatie- en configuratieproblemen op te lossen.

Kopieer het bestand van de lokale host naar de externe server

Met de volgende opdracht kopieert u een bestand “scp-cheatsheet.pdf” van een lokaal naar een extern Linux-systeem onder de map /home/tecmint.

scp -v scp-cheatsheet.pdf [email :/home/tecmint/.

Voorbeelduitvoer:

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
...

Kopieer het bestand van een externe host naar een lokale host

Met de volgende opdracht kopieert u een bestand “ssh-cheatsheet.pdf” van een externe host naar een lokaal systeem onder de map /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.

Voorbeelduitvoer:

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
...

Kopieer het bestand van een externe host naar een andere host

Met de volgende opdracht kopieert u een bestand “ssh-cheatsheet.pdf” van een externe host naar een ander extern hostsysteem onder de map /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf [email :/home/anusha/.

Kopieer bestanden met originele aanmaakdatum en -tijd

De parameter “-p” behoudt de oorspronkelijke wijzigings- en toegangstijden van bestanden terwijl het kopiëren van bestanden samen met de geschatte tijd en de verbindingssnelheid op het scherm verschijnt.

scp -p scp-cheatsheet.pdf [email :/home/tecmint/.

Voorbeelduitvoer:

[email 's password: 
scp-cheatsheet.pdf                                                                                                                                                                 100%  531   721.4KB/s   00:00    

Scp-compressie tijdens het kopiëren van bestanden

Een van de parameters die uw bestandsoverdracht kunnen versnellen, is de parameter “-C”, die wordt gebruikt om uw bestanden onderweg te comprimeren. Het unieke is dat compressie alleen in het netwerk plaatsvindt. Wanneer het bestand op de doelserver is aangekomen, keert het terug naar de oorspronkelijke grootte zoals vóór de compressie plaatsvond.

Kijk eens naar deze commando's. Er wordt gebruik gemaakt van één enkel bestand van 93 Mb.

scp -pv messages.log [email :.

Voorbeelduitvoer:

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 '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

Het kopiëren van bestanden zonder de parameter “-C” resulteert in 1661,3 seconden. U kunt het resultaat vergelijken met de onderstaande opdracht met behulp van de parameter “-C".

scp -Cpv messages.log [email :.

Voorbeelduitvoer:

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 '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

Zoals u kunt zien, wordt het overdrachtsproces bij gebruik van compressie in 162,5 seconden uitgevoerd. Het is 10 keer sneller dan het niet gebruiken van de parameter “-C”. Als u veel bestanden over het netwerk kopieert, kan de parameter “-C” u helpen de totale benodigde tijd te verkorten.

Wat we moeten opmerken is dat de compressiemethode op geen enkel bestand werkt. Wanneer het bronbestand al gecomprimeerd is, zul je daar geen verbetering vinden. Bestanden zoals .zip, .rar, afbeeldingen en .iso bestanden worden niet beïnvloed door de “ -C”-parameter.

Wijzig het SCP-cijfer om bestanden te coderen

Standaard gebruikt SCPAES-128” om bestanden te coderen. Als u naar een ander cijfer wilt overstappen om het te coderen, kunt u de parameter “-c” gebruiken.

Kijk eens naar deze opdracht.

scp -c 3des Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

Het bovenstaande commando vertelt SCP om het 3des-algoritme te gebruiken om het bestand te coderen. Wees voorzichtig dat deze parameter “-c” gebruikt en niet “-C“.

Beperking van het bandbreedtegebruik met SCP-opdracht

Een andere parameter die nuttig kan zijn, is de parameter “-l”. De parameter “-l” beperkt de te gebruiken bandbreedte. Het kan handig zijn als u een automatiseringsscript uitvoert om veel bestanden te kopiëren, maar u niet wilt dat de bandbreedte wordt opgeslokt door het SCP-proces.

scp -l 400 Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

De 400 waarde achter de parameter “-l” betekent dat we de bandbreedte voor het SCP proces beperken tot slechts 50 KB/ sec.

Eén ding om te onthouden is dat de bandbreedte wordt gespecificeerd in Kilobits/sec (kbps). Dit betekent dat 8 bits gelijk zijn aan 1 byte.

Terwijl SCP telt in Kilobyte/sec (KB/s). Dus als u uw bandbreedte wilt beperken tot een SCP maximum van slechts 50 KB/s, moet u dit instellen op 50 x 8=400.

SCP met een andere poort

Normaal gesproken gebruikt SCP poort 22 als standaardpoort, maar om veiligheidsredenen kunt u de poort wijzigen in een andere poort. We gebruiken bijvoorbeeld poort 2249.

Dan zou het commando er zo uit moeten zien.

scp -P 2249 Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

Zorg ervoor dat er een hoofdletter “P” wordt gebruikt en niet “p”, aangezien “p” al wordt gebruikt voor bewaarde tijden en modi.

SCP – Bestanden en mappen recursief kopiëren

Soms moeten we de map en alle bestanden/mappen erin kopiëren. Het zou beter zijn als we dit in één enkele opdracht kunnen doen met behulp van de parameter “-r”, die de hele map recursief kopieert.

scp -r documents [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

Wanneer het kopieerproces is voltooid, vindt u op de doelserver een map met de naam “documenten ” met al zijn bestanden. De map “documenten ” wordt automatisch aangemaakt.

SCP – Voortgangsberichten uitschakelen

Als u ervoor kiest de voortgangsmeter en waarschuwings-/diagnostische berichten van SCP niet te zien, kunt u deze uitschakelen met de parameter “-q”. Hier is een voorbeeld.

scp -q Label.pdf [email :.

[email 's password:
pungki@mint ~/Documents $

Zoals u kunt zien, is er nadat u het wachtwoord hebt ingevoerd, geen informatie over het SCP-proces. Nadat het proces is voltooid, ziet u opnieuw een prompt.

SCP – Bestanden kopiëren met behulp van proxy

De proxyserver wordt meestal gebruikt in de kantooromgeving. Standaard is SCP geen geconfigureerde proxy. Wanneer uw omgeving een proxy gebruikt, moet u SCP “vertellen” om met de proxy te communiceren.

Dit is het scenario. Het proxyadres is 10.0.96.6 en de proxypoort is 8080. De proxy implementeerde ook gebruikersauthenticatie. Eerst moet u het bestand “~/.ssh/config” maken. Ten tweede plaats je dit commando erin.

ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth

Vervolgens moet u het bestand “~/.ssh/proxyauth” maken dat .

myusername:mypassword

Daarna kunt u SCP zoals gewoonlijk transparant uitvoeren.

Houd er rekening mee dat de kurkentrekker mogelijk nog niet op uw systeem is geïnstalleerd. Op mijn Linux Mint moet ik het eerst installeren, met behulp van de standaard Linux Mint-installatieprocedure.

apt-get install corkscrew

Voor andere op yum gebaseerde systemen kunnen gebruikers kurkentrekker installeren met behulp van de volgende yum-opdracht.

yum install corkscrew

Een ander ding is dat, aangezien het bestand “~/.ssh/proxyauth” uw “gebruikersnaam” en “wachtwoord” in leesbare tekst bevat , zorg ervoor dat het bestand alleen voor u toegankelijk is.

Kies een ander ssh_config-bestand

Voor mobiele gebruikers die vaak switchen tussen de bedrijfsnetwerken en openbare netwerken zal het lastig zijn om steeds de instellingen in SCP te moeten wijzigen. Het is beter als we een ander ssh_config bestand kunnen plaatsen dat aan onze behoeften voldoet.

Proxy wordt gebruikt in het bedrijfsnetwerk, maar niet in het openbare netwerk en je wisselt regelmatig van netwerk.

scp -F /home/pungki/proxy_ssh_config Label.pdf

[email :.
[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

Standaard wordt het “ssh_config”-bestand per gebruiker in “~/.ssh/config“ geplaatst. Door een specifiek “ssh_config”-bestand te maken met proxy-compatibiliteit wordt het gemakkelijker om tussen netwerken te schakelen.

Wanneer u zich op het bedrijfsnetwerk bevindt, kunt u de parameter “-F” gebruiken. Wanneer u zich op een openbaar netwerk bevindt, kunt u de parameter “-F” overslaan.

Dat draait allemaal om SCP. U kunt manpagina's van SCP bekijken voor meer details. Laat gerust opmerkingen en suggesties achter.