Administrators Linux nên quen thuộc với môi trường dòng lệnh. Vì chế độ GUI (Giao diện người dùng đồ họa) trên các máy chủ Linux không phổ biến.
SSH có thể là giao thức phổ biến nhất để cho phép quản trị viên Linux quản lý các máy chủ một cách an toàn từ xa. Sử dụng giao diện dòng lệnh SSH cũng có lệnh SCP đi kèm, được sử dụng để sao chép tệp giữa các máy chủ một cách an toàn.
Cú pháp cơ bản của lệnh / command SCP Linux
Lệnh dưới đây sẽ đọc như sao chép “source_file_name” vào thư mục “destination_folder” trên “destination_host” bằng tài khoản “username”.
scp source_file_name username@destination_host:destination_folder
Có nhiều tham số trong lệnh SCP bạn có thể sử dụng. Dưới đây là những tham số mà bạn có thể sử dụng hàng ngày.
Chuyển Tập Tin một cách An Toàn trong Linux
Lệnh cơ bản SCP mà không có tham số sẽ sao chép các tệp trong nền. Người dùng sẽ không thấy gì trừ khi quá trình hoàn tất hoặc xảy ra lỗi nào đó.
Bạn có thể sử dụng tham số “-v
” để hiển thị thông tin gỡ lỗi trên màn hình. Nó có thể giúp bạn gỡ lỗi về kết nối, xác thực và cấu hình.
Copy File từ Local Host to Remote Server
Lệnh sau đây sao chép một tệp “scp-cheatsheet.pdf” đến một hệ thống Linux từ xa dưới thư mục /home/tecmint.
$ scp -v scp-cheatsheet.pdf tecmint@192.168.0.183:/home/tecmint/.
Ví dụ:
SCP – Sao chép tệp đến máy chủ Linux từ xa
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
...
Copy File từ Remote Host đến Local Host
Lệnh sau đây sao chép một tệp “ssh-cheatsheet.pdf” từ một máy chủ từ xa đến một hệ thống địa phương dưới thư mục /home/tecmint.
$ scp -v tecmint@192.168.0.183:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
Ví dụ:
SCP – Sao chép tệp đến hệ thống địa phương
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
...
Copy File từ Remote Host đến Another Host
Lệnh sau đây sao chép một tệp “ssh-cheatsheet.pdf” từ một máy chủ từ xa đến một máy chủ từ xa khác dưới thư mục /home/tecmint.
$ scp -v tecmint@192.168.0.183:/home/ravi/ssh-cheatsheet.pdf tecmint@192.168.0.102:/home/anusha/.
Copy Files với Original Creation Date and Time
Tham số “-p
” sẽ giữ nguyên thời gian sửa đổi và truy cập ban đầu của các tệp trong quá trình sao chép, kèm theo thời gian và tốc độ kết nối ước tính sẽ được hiển thị trên màn hình.
$ scp -p scp-cheatsheet.pdf tecmint@192.168.0.183:/home/tecmint/.
Ví dụ:
SCP – Giữ nguyên thời gian của tệp
tecmint@192.168.0.183's password:
scp-cheatsheet.pdf 100% 531 721.4KB/s 00:00
Nén SCP khi sao chép tập tin
Tham số “-C
” có thể làm tăng tốc quá trình sao chép tệp của bạn bằng cách nén tệp trên đường truyền. Điều đặc biệt là việc nén chỉ xảy ra trên mạng. Khi tệp đã đến máy chủ đích, nó sẽ trở lại kích thước ban đầu như trước khi nén diễn ra.
Hãy xem qua những lệnh này. Nó sử dụng một tệp duy nhất có kích thước 93 Mb.
$ scp -pv messages.log mrarianto@202.x.x.x:.
Ví dụ:
SCP – Sao chép tệp không sử dụng nén
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
Khi sao chép các tệp mà không sử dụng tham số “-C
” sẽ có thời gian 1661.3 giây. Bạn có thể so sánh với lệnh dưới đây sử dụng tham số “-C"
.
$ scp -Cpv messages.log mrarianto@202.x.x.x:.
Ví dụ:
SCP – Sao chép tệp sử dụng nén
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 bạn sử dụng nén, quá trình truyền tải hoàn thành trong 162.5 giây. Điều này nhanh 10 lần so với việc không sử dụng tham số “-C
”. Nếu bạn sao chép rất nhiều tệp qua mạng, tham số “-C
” sẽ giúp bạn giảm thời gian tổng cần thiết.
Điều chúng ta cần lưu ý là phương pháp nén sẽ không hoạt động với bất kỳ tệp nào. Khi tệp nguồn đã được nén, bạn sẽ không tìm thấy bất kỳ cải thiện nào. Các tệp như .zip, .rar, hình ảnh, và tệp .iso sẽ không bị ảnh hưởng bởi tham số “-C
”.
Change SCP Cipher to Encrypt Files
Mặc định, SCP sử dụng AES-128 để mã hóa các tệp. Nếu bạn muốn chuyển sang mật mã khác để mã hóa nó, bạn có thể sử dụng tham số “-c
”.
Hãy xem qua lệnh 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 đây cho SCP sử dụng thuật toán 3des để mã hóa tệp. Hãy cẩn thận và sử dụng chữ “-c
” chứ không phải “-C
“.
Hạn chế sử dụng băng thông với lệnh SCP
Một tham số khác có thể hữu ích là tham số “-l
”. 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, nhưng không muốn băng thông bị cạn kiệt 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 -l được hiểu như giới hạn băng thông cho quá trình SCP chỉ là 50 KB/giây.
Một điều cần nhớ là băng thông được chỉ định theo Kilobits/giây (kbps). Điều này có nghĩa là 8 bit bằng 1 byte.
Khi SCP đếm trong Kilobyte/giây (KB/giây). 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 1 cổng khác
Thông thường, SCP đang sử dụng cổng 22 làm cổng mặc định, nhưng vì mục tiêu bảo mật, bạn có thể thay đổi cổng thành cổng khác. Ví dụ, chúng tôi sử dụng cổng 2249.
Sau đó, lệnh sẽ là như sau.
$ 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 đảm bảo rằng nó sử dụng ký tự “P
” viết hoa chứ không phải “p
” vì “p
” đã được sử dụng cho các thời gian và chế độ được giữ nguyên.
SCP – Sao chép tập tin và thư mục một cách đệ quy
Đôi khi chúng ta cần sao chép thư mục và tất cả tệp/tệp tin 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 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, trên máy chủ đích, bạn sẽ thấy một thư mục có tên là “documents” với tất cả các tệp tin bên trong. Thư mục “documents” sẽ được tạo tự động.
SCP – Tắt tin nhắn tiến trình
Nếu bạn không muốn xem thanh tiến trình và các thông báo cảnh báo / chẩn đoán từ SCP, bạn có thể tắt nó bằ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ẽ lại thấy một lời nhắc.
SCP – Copy Files Using 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 làm proxy. Khi môi trường của bạn sử dụng proxy, bạn phải “cho biết” SCP để giao tiếp với proxy.
Dưới đây là tình huống. Địa chỉ proxy là 10.0.96.6 và cổng proxy là 8080. Proxy cũng áp dụng xác thực người dùng. Đầu tiên, bạn cần tạo tệp “~/.ssh/config”. Thứ hai, bạn đặt lệnh này vào tệp đó.
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
Sau đó, bạn cần tạo tệp “~/.ssh/proxyauth” chứa.
myusername:mypassword
Sau đó, bạn có thể thực hiện SCP một cách minh bạch như thông thường.
Hãy 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, bằng cách sử dụng thủ tục cài đặt tiêu chuẩn của Linux Mint.
$ apt-get install corkscrew
Đối với các hệ thống khác dựa trên yum, 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 trọng tạm ~/.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 thuần, hãy đảm bảo rằng tệp chỉ có thể được truy cập bởi bạn duy nhất.
Choose a Different ssh_config File
Đối với người dùng di động thường xuyên chuyển giữa các mạng công ty và các mạng công cộng, việc luôn thay đổi cài đặt trong SCP sẽ gây phiền toái. Tốt hơn nếu chúng ta có thể đặt một tập tin ssh_config khác phù hợp với nhu cầu của chúng ta.
Proxy được sử dụng trong mạng công ty nhưng không sử dụ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
Theo mặc định, tập tin “ssh_config” mỗi người dùng sẽ được đặt trong “~/.ssh/config“. Tạo một tệp cụ thể “ssh_config” với khả năng tương thích 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 ở trong mạng công cộng, bạn có thể bỏ qua tham số “-F
”.
Đó là tất cả về SCP. Bạn có thể xem trang hướng dẫn (man pages) của SCP để biết thêm chi tiết. Vui lòng để lại bình luận và gợi ý.