10 ví dụ lệnh scp trên Centos / Ubuntu / Debian / Fedora

Lệnh scp được sử dụng để sao chép các tệp tin giữa các máy chủ một cách an toàn. 

Dưới đây là cú pháp cơ bản của lệnh SCP:

scp source_file_name username@destination_host:destination_folder

Truyền tệp an toàn trong Linux bằng lệnh scp dễ dàng

Lệnh SCP không có tham số sẽ sao chép các tệp tin trong nền. Người dùng sẽ không thấy bất cứ điều gì trừ khi quá trình sao chép hoàn thành hoặc xảy ra lỗi.

Bạn có thể sử dụng tham số "-v" để in thông tin gỡ lỗi ra màn hình. Tham số này giúp bạn gỡ lỗi vấn đề kết nối, xác thực và cấu hình.

1.1 Sao chép tệp tin từ máy chủ cục bộ đến máy chủ từ xa 

Sao chép tệp tin "scp-cheatsheet.pdf" từ máy chủ cục bộ đến hệ thống Linux từ xa trong thư mục /home/tecmint.

$ scp -v scp-cheatsheet.pdf tecmint@192.168.0.183:/home/tecmint/.

Kết quả đầu ra ví dụ:

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

1.2 Sao chép tệp tin từ máy chủ từ xa đến máy chủ cục bộ

Sao chép tệp tin "ssh-cheatsheet.pdf" từ máy chủ từ xa đến hệ thống cục bộ trong thư mục /home/tecmint.

$ scp -v tecmint@192.168.0.183:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
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
...

1.3 Sao chép tệp tin từ máy chủ từ xa đến máy chủ khác

Lệnh scp ao chép tệp tin "ssh-cheatsheet.pdf" từ máy chủ từ xa đến một máy chủ từ xa khác trong thư mục /home/tecmint.

$ scp -v tecmint@192.168.0.183:/home/ravi/ssh-cheatsheet.pdf tecmint@192.168.0.102:/home/anusha/.

Lệnh scp sao chép tệp tin, giữ nguyên thời gian và ngày tạo 

Tham số "-p" sẽ giữ nguyên thời gian và ngày tạo ban đầu của tệp tin trong quá trình sao chép, và thời gian dự kiến và tốc độ kết nối sẽ hiển thị trên màn hình.

$ scp -p scp-cheatsheet.pdf tecmint@192.168.0.183:/home/tecmint/.

Kết quả đầu ra ví dụ:

tecmint@192.168.0.183's password: 
scp-cheatsheet.pdf  

Nén dữ liệu trong quá trình sao chép bằng SCP

Một trong những tham số có thể làm tăng tốc quá trình sao chép là tham số "-C", được sử dụng để nén các tệp tin trong quá trình truyền. Điều đặc biệt là quá trình nén chỉ diễn ra trên mạng. Khi tệp tin đã đến máy chủ đích, nó sẽ trở lại kích thước ban đầu trước khi nén diễn ra.

Ví dụ sử dụng một tệp tin đơn có kích thước 93 Mb.

$ scp -pv messages.log mrarianto@202.x.x.x:.

Kết quả đầu ra ví dụ:

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
mrarianto@202.x.x.x'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

Sao chép tệp tin mà không sử dụng tham số "-C" sẽ mất 1661,3 giây. Bạn có thể so sánh kết quả với lệnh dưới đây sử dụng tham số "-C". 

$ scp -Cpv messages.log mrarianto@202.x.x.x:.

Kết quả đầu ra ví dụ:

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
mrarianto@202.x.x.x'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

Như bạn có thể thấy, khi sử dụng nén, quá trình sao chép hoàn thành trong 162,5 giây. Điều này nhanh hơn gấp 10 lần so với việc không sử dụng tham số "-C". Nếu bạn đang sao chép nhiều tệp tin qua mạng, tham số "-C" sẽ giúp bạn giảm thời gian cần thiết.

Một điều cần lưu ý là phương pháp nén sẽ không hoạt động với mọi loại tệp tin. Khi tệp tin nguồn đã được nén trước đó, bạn sẽ không thấy bất kỳ cải thiện nào khi sử dụng tham số "-C". Các tệp tin như .zip, .rar, hình ảnh và tệp tin .iso sẽ không bị ảnh hưởng bởi tham số "-C".

Thay đổi mật mã SCP để mã hóa tệp tin

Mặc định, SCP sử dụng "AES-128" để mã hóa các tập tin. Nếu bạn muốn thay đổi sang một thuật toán mã hóa khác, bạn có thể sử dụng tham số "-c".

Xem ví dụ này. 

$ scp -c 3des Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

Lệnh trên cho biết SCP sử dụng thuật toán "3des" để mã hóa tập tin. Hãy chú ý rằng tham số này sử dụng "-c" chứ không phải "-C".

Giới hạn băng thông sử dụng với lệnh SC

Tham số "l" có thể hữu ích. Tham số "-l" sẽ giới hạn băng thông sử dụng. Nó sẽ hữu ích nếu bạn thực hiện một tập lệnh tự động để sao chép nhiều tập tin, nhưng bạn không muốn băng thông bị tiêu thụ bởi quá trình SCP. 

$ scp -l 400 Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

Giá trị 400 sau tham số "-l" có nghĩa là chúng ta giới hạn băng thông cho quá trình SCP chỉ 50 KB/giây.

Một điều cần nhớ là băng thông được chỉ định bằng Kilobits/giây (kbps). Điều này có nghĩa là 8 bit tương đương với 1 byte.

Trong khi SCP tính theo Kilobyte/giây (KB/s). Vì vậy, nếu bạn muốn giới hạn băng thông SCP tối đa chỉ là 50 KB/giây, bạn cần đặt nó là 50 x 8 = 400.

SCP với cổng khác

Thông thường, SCP sử dụng cổng 22 làm cổng mặc định, nhưng vì lý do bảo mật, bạn có thể thay đổi cổng thành cổng khác. 

Ví dụ, chúng tôi đang sử dụng cổng Lệnh sau đây sẽ như thế này:

$ scp -P 2249 Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

Hãy chắc chắn rằng nó sử dụng chữ cái "P" in hoa không phải "p" vì "p" đã được sử dụng cho thời gian và chế độ được bảo tồn.

SCP – Sao chép tập tin và thư mục theo cách đệ quy

Đôi khi chúng ta cần sao chép thư mục và tất cả các tập tin/thư mục bên trong nó. Sẽ tốt hơn nếu chúng ta có thể làm điều này trong một lệnh duy nhất bằng cách sử dụng tham số "-r", sao chép toàn bộ thư mục theo cách đệ quy. 

$ scp -r documents mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

Khi quá trình sao chép hoàn tất, bạn sẽ thấy một thư mục có tên "documents" tại máy chủ đích với tất cả các tập tin của nó. Thư mục "documents" sẽ được tự động tạo.

SCP – Vô hiệu hóa thông báo tiến trình

Nếu bạn không muốn xem thanh tiến trình và thông báo/cảnh báo từ SCP, bạn có thể tắt chúng bằng cách sử dụng tham số "-q". Dưới đây là một ví dụ. 

$ scp -q Label.pdf mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
pungki@mint ~/Documents $

Như bạn có thể thấy, sau khi nhập mật khẩu, không có thông tin về quá trình SCP. Sau khi quá trình hoàn tất, bạn sẽ thấy một nhắc lệnh lại.

SCP – Sao chép tập tin sử dụng Proxy

Máy chủ proxy thường được sử dụng trong môi trường văn phòng. Mặc định, SCP không được cấu hình proxy. Khi môi trường của bạn sử dụng proxy, bạn phải "thông báo" cho SCP để giao tiếp với proxy.

Dưới đây là kịch bản. Địa chỉ proxy là 10.0.96.6 và cổng proxy là Proxy cũng đã thực hiện xác thực người dùng. Trước tiên, bạn cần tạo tệp "/.ssh/proxyauth" chứa. Sau đó, bạn có thể thực hiện SCP một cách trong suốt như thường lệ.

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

Bạn cần tạo tệp "~/.ssh/proxyauth" chứa thông tin như sau. 

myusername:mypassword

Sau đó, bạn có thể sử dụng SCP một cách minh bạch như thông thường.

Lưu ý rằng corkscrew có thể chưa được cài đặt trên hệ thống của bạn. Trên Linux Mint của tôi, tôi cần cài đặt nó trước, sử dụng quy trình cài đặt tiêu chuẩn của Linux Mint. 

$ apt-get install corkscrew

Đối với các hệ thống dựa trên yum khác, người dùng có thể cài đặt corkscrew bằng lệnh yum sau đây. 

# yum install corkscrew

Một điều khác là vì tệp "~/.ssh/proxyauth" chứa "tên người dùng" và "mật khẩu" của bạn dưới dạng văn bản rõ, vui lòng đảm bảo rằng chỉ có bạn mới có thể truy cập vào tệp đó.

Chọn một tệp ssh_config khác

Đối với người dùng di động thường xuyên chuyển đổi giữa mạng công ty và mạng công cộng, việc thay đổi cài đặt trong SCP sẽ gây khó khăn. Sẽ tốt hơn nếu chúng ta có thể đặt một tệp ssh_config khác để phù hợp với nhu cầu của chúng ta.

Proxy trong mạng công ty nhưng không trong mạng công cộng và bạn thường xuyên chuyển mạng. 

$ scp -F /home/pungki/proxy_ssh_config Label.pdf
mrarianto@202.x.x.x:.
mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

Mặc định, tệp "ssh_config" của mỗi người dùng sẽ được đặt trong "~/.ssh/config". Tạo một tệp "ssh_config" cụ thể với khả năng tương thích với proxy sẽ giúp dễ dàng chuyển đổi giữa các mạng.

Khi bạn đang trong mạng công ty, bạn có thể sử dụng tham số "-F". Khi bạn đang ở trong mạng công cộng, bạn có thể bỏ qua tham số "-F".