+1

10 SCP Commands to Transfer Files/Folders in Linux

Làm dev, đến một thời điểm nào đó cứng một chút hoặc có thể là team lead, tech lead chúng ta sẽ thường xuyên phải làm việc trên server (nơi chúng ta deploy-triển khai code thành các ứng dụng). Các server ngày nay hầu hết là Centos, Ubuntu của hệ điều hành Linux. Khi làm việc trên với Linux chúng ta nên quen thuộc với CLI. Vì chế độ GUI trong các máy chủ Linux không giống như Window. SSH khi này có thể là giao thức phổ biến nhất để cho phép người dùng Linux quản lý các máy chủ từ xa một cách an toàn. Built-in với lệnh SSH có lệnh SCP. SCP được sử dụng để sao chép (các) tệp giữa các máy chủ theo cách bảo mật. Chúng ta sẽ tìm hiểu về một số lệnh với SCP phổ biến:

Lệnh dưới đây sẽ copy "source_file_name" tới "destination_folder" tại "destination_host" sử dụng username account".

Cú pháp scp cơ bản

scp source_file_name username@destination_host:destination_folder

Có nhiều tham số trong lệnh SCP mà ta có thể sử dụng. Dưới đây là các thông số có thể hữu ích :

Cung cấp thông tin chi tiết quá trình scp với tham số -v

Với lệnh scp cơ bản người dùng sẽ không thấy gì trừ khi quá trình được thực hiện có một số lỗi xuất hiện. Khi sử dụng tham số -v sẽ giúp ta in thông tin gỡ lỗi trên màn hình. Nó có thể giúp ta gỡ rối các vấn đề về kết nối, xác thực cấu hình.

pungki@mint ~/Documents $ scp -v Label.pdf mrarianto@202.x.x.x:.

Output

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -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: 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: password
mrarianto@202.x.x.x's password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
Sending file modes: C0770 3760348 Label.pdf
Sink: C0770 3760348 Label.pdf
Label.pdf 100% 3672KB 136.0KB/s 00:27
Transferred: sent 3766304, received 3000 bytes, in 65.2 seconds
Bytes per second: sent 57766.4, received 46.0
debug1: Exit status 0

Cung cấp thông tin thời gian sửa đổi, thời gian truy cập tệp gốc

Tham số -p sẽ giúp ta về điều này. Thời gian ước tính và tốc độ kết nối sẽ xuất hiện trên màn hình.

pungki@mint ~/Documents $ scp -p Label.pdf mrarianto@202.x.x.x:.

Output

mrarianto@202.x.x.x's password:
Label.pdf 100% 3672KB 126.6KB/s 00:29

Giúp truyền tệp nhanh hơn với tham số -C

Một trong các tham số có thể truyền tệp của nhanh hơn là tham số -C. Thông số -C sẽ nén tệp khi đang di chuyển. Quá trình nén chỉ xảy ra trong mạng khi truyền tệp. Khi tệp được gửi đến máy chủ đích, tệp sẽ trở lại kích thước ban đầu như trước khi quá trình nén xảy ra. Hãy xem các lệnh này. Nó đang sử dụng một tập tin duy nhất 93 Mb.

pungki@mint ~/Documents $ scp -pv messages.log mrarianto@202.x.x.x:.

Output

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

Nếu sao chép tập tin mà không có tham số -C sẽ cho kết quả là 1661.3 giây. Ta có thể so sánh kết quả với lệnh dưới đây sử dụng tham số -C.

pungki@mint ~/Documents $ scp -Cpv messages.log mrarianto@202.x.x.x:.

Output

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ư ta thấy, quá trình chuyển tệp được thực hiện trong 162,5 giây. Nó nhanh hơn 10 lần so với không sử dụng tham số -C. Nếu ta đang sao chép nhiều tệp qua mạng, tham số -C sẽ giúp bạn giảm thời gian chuyển tệp.

Các tệp như .zip, .rar, pictures và .iso sẽ không bị ảnh hưởng bởi tham số -C.

Mã hóa tệp

Theo mặc định SCP sử dụng AES-128 để mã hóa các tệp. Nếu ta muốn thay đổi cách mã hóa, ta có thể sử dụng tham số -c. Hãy xem lệnh này.

pungki@mint ~/Documents $ 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 báo cho scp sử dụng thuật toán 3des để mã hóa tập tin. Hãy cẩn thận rằng tham số này sử dụng -c chứ không phải -C.

Hạn chế sử dụng băng thông

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 ta làm một kịch bản tự động hóa để sao chép rất nhiều tập tin, nhưng ta không muốn băng thông bị cạn kiệt bởi quy trình scp.

pungki@mint ~/Documents $ 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 phía sau -l có nghĩa là ta giới hạn băng thông cho quy trình SCP chỉ 50 KB / giây. Một điều cần nhớ là băng thông được xác định bằng Kilobits / sec (kbps). Nó có nghĩa là 8 bit bằng 1 byte.
Trong khi scp tính bằng Kilobyte / giây (KB / s). Vì vậy, nếu ta muốn giới hạn băng thông của ta cho tối đa scp chỉ 50 KB / s, ta cần phải đặt nó thành 50 x 8 = 400.

Chỉ định cổng cụ thể để sử dụng với scp

Thông thường scp đang sử dụng cổng 22 làm cổng mặc định. Nhưng vì lý do bảo mật, ta có thể thay đổi cổng thành cổng khác. Ví dụ, ta đang sử dụng cổng 2249.

pungki@mint ~/Documents $ 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 ta sử dụng tham số -P không phải -p

Sao chép tệp trong thư mục đê quy

Đôi khi chúng ta cần phải sao chép thư mục và tất cả các tập tin bên trong nó. Sẽ tốt hơn nếu chúng ta có thể làm điều đó trong 1 lệnh. scp hỗ trợ kịch bản đó bằng tham số -r.

pungki@mint ~/Documents $ 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 được thực hiện, tại máy chủ đích, bạn sẽ tìm thấy một thư mục có tên là "documents" với tất cả các tệp của nó. Thư mục “documents” được tạo tự động.

Tắt đồng hồ đo tiến độ và thông báo cảnh báo/chuẩn đoán

Nếu ta chọn không xem đồng hồ đo tiến độ và thông báo cảnh báo/chẩn đoán từ SCP, ta có thể tắt thông báo bằng tham số -q. Đây là ví dụ.

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

Như ta thấy, không có bất kỳ thông tin nào về quy trình SCP. Sau khi quá trình hoàn tất, bạn sẽ thấy một lời nhắc lần nữa.

Sao chép tệp bằng scp qua Proxy

Proxy server thường được sử dụng trong môi trường văn phòng. Về cơ bản, SCP không được cấu hình proxy. Khi môi trường của ta sử dụng proxy, ta phải cho SCP biết để giao tiếp với proxy.

Đây là kịch bản. Địa chỉ proxy là 10.0.96.6 và cổng proxy là 8080. Proxy cũng thực hiện xác thực người dùng. Đầu tiên, ta cần tạo tập tin “~ / .ssh / config”. Thứ hai, ta đặt lệnh này bên trong nó.

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

Sau đó, ta cần tạo tệp “~ / .ssh / proxyauth” chứa.

myusername:mypassword

Sau đó ta có thể thực hiện SCP một cách minh bạch như bình thường.

Xin lưu ý rằng corkscrew có thể chưa được cài đặt trên hệ thống của ta. Trên Linux Mint của tôi, tôi cần phải cài đặt nó trước, sử dụng thủ tục cài đặt Linux Mint chuẩn.

apt-get install corkscrew

Đối với một số hệ thống dùng "yum" ta có thể cài đặt bằng câu lệnh sau:

yum install corkscrew

Khi “~ / .ssh / proxyauth” chứa “username” và “password” ở định dạng văn bản rõ ràng, hãy chắc chắn rằng các tập tin có thể được truy cập chỉ bởi ta.

Chọn tệp ssh_config khác

Đối với người dùng di động thường chuyển đổi giữa mạng công ty và mạng công cộng, nó sẽ phải luôn thay đổi cài đặt trong SCP. Điều này sẽ tốt hơn nếu chúng ta có thể đặt một tập tin ssh_config khác nhau để phù hợp với nhu cầu của chúng ta.

Đây là một kịch bản đơn giản.

Proxy được sử dụng trong mạng công ty nhưng không được sử dụng trong mạng công cộng và bạn thường xuyên chuyển đổi mạng.

pungki@mint ~/Documents $ 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 "ssh_config" tập tin cho mỗi người dùng sẽ được đặt trong "~ / .ssh / config". Tạo một tệp "ssh_config" cụ thể với proxy tương thích, sẽ giúp ta chuyển đổi giữa các mạng dễ dàng hơn.

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

Đó là tất cả về SCP trong bài viết này. Bạn có thể xem các trang hướng dẫn sử dụng của SCP để biết thêm chi tiết.

Hi vọng bài viết hữu ích với mọi người.``

Nguồn : https://www.tecmint.com/scp-commands-examples/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí