SCP – Copy file trên Linux

SCP là gì ?

  • SCP (Secure Copy – Sao chép an toàn) là một ứng dụng sử dụng SSH để mã hóa toàn bộ quá trình chuyển tập tin.
  • SCP là lệnh dùng để di chuyển file dữ liệu giữa các máy tính chạy hệ điều hành Linux từ xa.
  • SCP dùng ssh để di chuyển dữ liệu, có chế độ bảo mật giống như ssh.

Cài đặt SCP lên Server Linux

Với các bản OS mới hiện nay, công cụ scp thường đã được tích hợp sẵn khi cài đặt hệ điều hành. Nếu server của bạn chưa được tích hợp sẵn, hãy chạy lệnh sau để cài đặt.

RedHat/Centos:

yum install scp -y

Debian/Ubuntu:

sudo apt-get install scp -y

Sử dụng SCP để Transfer file

Cấu trúc cú pháp

Cú pháp cơ bản của SCP như sau:

scp [option] <Source> <Destination>

Trong đó:

  • scp: là lệnh gọi công cụ scp
  • [option]: là các tuỳ trọn khi thực hiện trong quá trình truyền tải file
  • <Source>: Là đường dẫn đến file/folder nguồn thực hiện truyền tải.
  • <Destination>: Là đường dẫn đích lưu trữ file/folder khi truyền tải.

Một số Option thường sử dụng trong SCP như;

  • -r: Sử dụng cho việc truyền các thư mục.
  • -P: Sử dụng để khai báo cổng ssh máy chủ từ xa.
  • -p:  Lưu giữ dấu thời gian của tệp và chế độ của tệp gốc. Các bản sao cục bộ của bạn sẽ có cùng thời gian tạo hoặc quyền ghi như bản gốc của chúng.
  • -C: Sử dụng để nén dữ liệu trước khi gửi.
  • -c: Sử dụng để chọn thuật toán mã hoá để truyền dữ liệu.
  • -v:  Cho ra kết quả output với nhiều thông tin hơn về những gì chương trình thực thi ở background.Điều này thường sẽ có ích khi chương trình lỗi hoặc không thể hoàn tất request đến. -v sẽ cho bạn thấy chính xác các thông tin chương trình hoạt động và có vấn đề như thế nào.

Lưu ý: bạn có thể kết hợp nhiều option vào một lệnh scp để tối ưu quá trình transfer file.

Transfer file từ Local Server sang Remote Server

Câu lệnh dưới đây sẽ thực hiện trên Linux Server 01 – 10.10.10.11.

Copy file test1.txt từ server Linux Server 01 sang server Linux Server 02 – 10.10.10.12:

scp test1.txt [email protected]:/root

Trong đó:

  • test1.txt là Source file
  • root là user trên Linux Server 02
  • 10.10.10.12 là IP của Linux Server 02
  • /root là đường dẫn đích trên server 2 sẽ copy tile test1.txt đến.

Nếu server không được cấu hình dùng SSH Key lần gửi file đầu tiên sẽ hiện thông báo như bên dưới, nhậpyesđể đồng ý sau đó nhập Password của User root trên Linux Server 02.

The authenticity of host '10.10.10.12 (10.10.10.12)' can't be established. ECDSA key fingerprint is SHA256:MDFpkZS6ItewLELhvUFTqAuplNJv6xSF9cvmGbAgOf8.
ECDSA key fingerprint is MD5:97:5f:63:b9:44:b8:d1:8e:d9:b7:5a:71:08:0b:09:38.
Are you sure you want to continue connecting (yes/no)? yes [email protected]'s password:

Copy file thành công:

test1.txt                                            100%     0        0.0KB/s         00:00

Tương tự như vậy, ta có thể sử dụng các lệnh như phía dưới.

Transfer file từ Remote Server sang Local Server

scp [email protected]:/root/test2.txt /home

Lệnh trên copy file test2.txt từ thư mục /root của server Linux Server 02 về thư mục /home của server Local.

Transfer nhiều file cùng một lúc

Bạn có thể chuyển (transfer) nhiều file bằng cách chỉ định các file và cách nhau một “khoảng trắng” .

scp test3.txt test4.txt [email protected]:/root

Transfer thư mục

Để copy toàn bộ thư mục từ máy chủ này đến máy chủ khác bạn thêm option ‘-r‘ và chỉ định thư mục.

scp -r /home/data [email protected]:/root

Lệnh trên sẽ copy thư mục /home/data từ server Local sang thự mục /root của server Linux Server 02. (thêm option -v để hiển thị tiến trình Transfer).

Nén dữ liệu trước khi Transfer

Một option cực hay để tăng tốc độ truyền tải nhầm tiết kiệm thời gian và băng thông. Tất cả những gì bạn cần làm là bật option ‘–C‘ để nén dữ liệu. Và kết quả dữ liệu sẽ được nén để chuyển đi và giải nén khi tới đích.

scp -rC /home/data [email protected]:/root

Lệnh trên sẽ copy thư mục /home/data từ server Local sang thự mục /root của server Linux Server 02. Trước khi chuyển đi, Server Local sẽ thực hiện nén toàn bộ dữ liệu trong thư mục data.

Giới hạn băng thông khi Transfer

Nếu bạn không muốn SCP chiếm toàn bộ băng Server, hãy sử dụng option ‘–l‘ để giới hạn băng thông tối đa cho việc gửi file đi tính bằng Kbit/s.

scp -r -l 400 /home/data [email protected]:/root

Lệnh trên sẽ copy thư mục /home/data từ server Local sang thự mục /root của server Linux Server 02. Giới hạn băng thông gửi file là 400 Kbit/s.

Thay đổi Port kết nối SSH đến Remote Server

Nếu trên máy chủ remote đang hoạt động với port SSH khác 22, khi đó bạn cần cho SCP biết rằng phải request đến port khác này thông qua option ‘–P‘.

scp -r -P 9900 /home/data [email protected]:/root

Lệnh trên sẽ kết nối Server Local đến Linux Server 02 qua port 9900. Copy thư mục /home/data từ server Local sang thự mục /root của server Linux Server 02.

Giữ nguyên các thuộc tính của file cần Transfer

Sử dụng option ‘–p‘ (không viết hoa) sẽ giúp file giữ nguyên các thuộc tính như thời gian chỉnh sửa file, thời gian truy cập file…

scp -p test3.txt test4.txt [email protected]:/root

Sử dụng SSH Key để xác thực

Trường hợp này áp dụng khi bạn sử dụng xác thực SSH bằng key, bạn sẽ cần chỉ định file private key, sử dụng option ‘-i’.

scp -p -i /path/to/private_key.pem test1.txt [email protected]:/root

Sử dụng thuật toán mã hóa khác

SCP mặc định sử dụng thuật toán AES để mã hóa file truyền đi. Bạn có thể muốn sử dụng một thuận toán khác để tăng tốc độ chuyển file chẳng hạn, ví dụ như thuật toán blowfish và arcfour thì nhanh hơn AES (nhưng bảo mật lại kém hơn). Sử dụng option ‘-c’ (không viết hoa).

scp -rC -c blowfish /home/data [email protected]:/root

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *