Wyszukiwanie w witrynie

Polecenie SCP Linux — bezpieczne przesyłanie plików w systemie Linux


Administratorzy Linuksa powinni znać środowisko wiersza poleceń. Ponieważ tryb GUI (graficzny interfejs użytkownika) na serwerach Linux nie jest powszechnie instalowany.

SSH może być najpopularniejszym protokołem umożliwiającym administratorom Linuksa zdalne i bezpieczne zarządzanie serwerami. W poleceniu SSH wbudowane jest polecenie SCP, które służy do bezpiecznego kopiowania plików pomiędzy serwerami.

Podstawowa składnia polecenia SCP

Poniższe polecenie zostanie odczytane jako kopia „nazwa_pliku_źródłowego” do „folderu_docelowego” w „host_docelowy” przy użyciu „nazwy użytkownika " konto.

scp source_file_name username@destination_host:destination_folder

W poleceniu SCP jest wiele parametrów, których możesz użyć. Oto parametry, z których można korzystać na co dzień.

Bezpiecznie przesyłaj pliki w systemie Linux

Podstawowe polecenie SCP bez parametrów skopiuje pliki w tle. Użytkownicy nie zobaczą niczego, chyba że proces zostanie zakończony lub pojawi się jakiś błąd.

Możesz użyć parametru „-v”, aby wydrukować informacje debugowania na ekranie. Może pomóc w debugowaniu problemów z połączeniem, uwierzytelnianiem i konfiguracją.

Skopiuj plik z hosta lokalnego na serwer zdalny

Poniższe polecenie kopiuje plik „scp-cheatsheet.pdf” z lokalnego do zdalnego systemu Linux w katalogu /home/tecmint.

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

Przykładowy wynik:

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

Skopiuj plik z hosta zdalnego do hosta lokalnego

Poniższe polecenie kopiuje plik „ssh-cheatsheet.pdf” ze zdalnego hosta do systemu lokalnego w katalogu /home/tecmint.

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

Przykładowy wynik:

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

Skopiuj plik ze zdalnego hosta na inny host

Poniższe polecenie kopiuje plik „ssh-cheatsheet.pdf” ze zdalnego hosta do innego zdalnego hosta w katalogu /home/tecmint.

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

Skopiuj pliki z oryginalną datą i godziną utworzenia

Parametr „-p” zachowa oryginalną modyfikację plików i czasy dostępu podczas kopiowania plików, a na ekranie pojawi się szacowany czas i prędkość połączenia.

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

Przykładowy wynik:

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

Kompresja scp podczas kopiowania plików

Jednym z parametrów, który może przyspieszyć przesyłanie plików, jest parametr „-C”, który służy do kompresowania plików w podróży. Wyjątkowość polega na tym, że kompresja zachodzi tylko w sieci. Gdy plik dotrze na serwer docelowy, powróci do pierwotnego rozmiaru sprzed kompresji.

Spójrz na te polecenia. Wykorzystuje pojedynczy plik o rozmiarze 93 Mb.

scp -pv messages.log [email :.

Przykładowy wynik:

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

Kopiowanie plików bez parametru „-C” zajmie 1661,3 sekund. Możesz porównać wynik z poniższym poleceniem, używając parametru „-C”.

scp -Cpv messages.log [email :.

Przykładowy wynik:

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

Jak widać, gdy używasz kompresji, proces przesyłania trwa 162,5 sekundy. Jest to 10 razy szybsze niż nieużywanie parametru „-C”. Jeśli kopiujesz wiele plików przez sieć, parametr „-C” pomoże Ci skrócić całkowity potrzebny czas.

Należy zauważyć, że metoda kompresji nie będzie działać na żadnym pliku. Gdy plik źródłowy jest już skompresowany, nie znajdziesz tam żadnej poprawy. Pliki takie jak .zip, .rar, pictures i .iso nie będą miały wpływu na „ parametr -C”.

Zmień szyfr SCP na szyfrowanie plików

Domyślnie SCP używa „AES-128” do szyfrowania plików. Jeśli chcesz zmienić szyfr na inny, aby go zaszyfrować, możesz użyć parametru „-c”.

Spójrz na to polecenie.

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

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

Powyższe polecenie informuje SCP, aby użył algorytmu 3des do zaszyfrowania pliku. Należy uważać, aby ten parametr używał „-c”, a nie „-C”.

Ograniczanie wykorzystania przepustowości za pomocą polecenia SCP

Kolejnym parametrem, który może być przydatny, jest parametr „-l”. Parametr „-l” ograniczy wykorzystywaną przepustowość. Przyda się, jeśli wykonasz skrypt automatyzujący kopiowanie dużej liczby plików, ale nie chcesz, aby przepustowość została wyczerpana przez proces SCP.

scp -l 400 Label.pdf [email :.

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

Wartość 400 za parametrem „-l” oznacza, że ograniczamy przepustowość procesu SCP do jedynie 50 KB/ sek.

Należy pamiętać, że przepustowość jest podawana w kilobitach/s (kbps). Oznacza to, że 8 bitów równa się 1 bajt.

Podczas gdy SCP liczy się w kilobajcie/s (KB/s). Jeśli więc chcesz ograniczyć przepustowość do maksymalnie SCP wynoszącego tylko 50 KB/s, musisz ustawić ją na 50 x 8=400.

SCP z innym portem

Zwykle SCP używa portu 22 jako portu domyślnego, ale ze względów bezpieczeństwa możesz zmienić port na inny. Na przykład używamy portu 2249.

Wtedy polecenie powinno wyglądać tak.

scp -P 2249 Label.pdf [email :.

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

Upewnij się, że używa dużej litery „P”, a nie „p”, ponieważ „p” jest już używane w zachowanych czasach i trybach.

SCP – kopiuj pliki i katalogi rekurencyjnie

Czasami musimy skopiować katalog i wszystkie znajdujące się w nim pliki/katalogi . Lepiej będzie, jeśli uda nam się to zrobić jednym poleceniem, korzystając z parametru „-r”, który rekurencyjnie kopiuje cały katalog.

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

Po zakończeniu procesu kopiowania na serwerze docelowym znajdziesz katalog o nazwie „dokumenty” ze wszystkimi plikami. Folder „dokumenty” zostanie utworzony automatycznie.

SCP – wyłącz komunikaty o postępie

Jeśli zdecydujesz się nie widzieć miernika postępu i komunikatów ostrzegawczych/diagnostycznych z SCP, możesz je wyłączyć za pomocą parametru „-q”. Oto przykład.

scp -q Label.pdf [email :.

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

Jak widać po wpisaniu hasła nie ma żadnej informacji o procesie SCP. Po zakończeniu procesu ponownie pojawi się monit.

SCP – kopiuj pliki za pomocą proxy

Serwer proxy jest zwykle używany w środowisku biurowym. Natywnie SCP nie jest skonfigurowanym serwerem proxy. Kiedy Twoje środowisko korzysta z serwera proxy, musisz „powiedzieć” SCP, aby komunikował się z serwerem proxy.

Oto scenariusz. Adres proxy to 10.0.96.6, a port proxy to 8080. Serwer proxy zaimplementował także uwierzytelnianie użytkownika. Najpierw musisz utworzyć plik „~/.ssh/config”. Po drugie, umieszczasz w nim to polecenie.

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

Następnie musisz utworzyć plik „~/.ssh/proxyauth”, który zawiera.

myusername:mypassword

Następnie możesz jak zwykle wykonywać SCP w sposób przejrzysty.

Pamiętaj, że korkociąg może nie być jeszcze zainstalowany w Twoim systemie. Na moim Linux Mint muszę go najpierw zainstalować, korzystając ze standardowej procedury instalacji Linux Mint.

apt-get install corkscrew

W innych systemach opartych na yum użytkownicy mogą zainstalować korkociąg za pomocą następującego polecenia yum.

yum install corkscrew

Inną rzeczą jest to, że ponieważ plik „~/.ssh/proxyauth” zawiera Twoją „nazwę użytkownika” i „hasło” w formacie zwykłego tekstu , upewnij się, że dostęp do pliku masz tylko Ty.

Wybierz inny plik ssh_config

Dla użytkowników mobilnych, którzy często przełączają się między sieciami firmowymi a sieciami publicznymi, uciążliwa będzie ciągła zmiana ustawień w SCP. Lepiej jest, jeśli możemy umieścić inny plik ssh_config odpowiadający naszym potrzebom.

Serwer proxy jest używany w sieci firmowej, ale nie w sieci publicznej i regularnie przełączasz sieci.

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

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

Domyślnie plik „ssh_config” dla każdego użytkownika zostanie umieszczony w „~/.ssh/config”. Utworzenie specjalnego pliku „ssh_config” zgodnego z proxy ułatwi przełączanie między sieciami.

Będąc w sieci firmowej możesz skorzystać z parametru „-F”. Będąc w sieci publicznej, możesz pominąć parametr „-F”.

To wszystko na temat SCP. Więcej szczegółów znajdziesz na stronach podręcznika SCP. Zapraszam do pozostawiania komentarzy i sugestii.