Hướng dẫn sử dụng lệnh scp Image Hướng dẫn sử dụng lệnh scp

Bài viết này giới thiệu các bạn về cách sử dụng lệnh scp trên hệ điều hành Linux, giới thiệu với cách bạn về chức năng và cách sử dụng lệnh scp để các bạn có thể tự tìm hiểu và tự học Linux cơ bản dễ dàng hơn.

1. Giới thiệu scp

Lệnh scp (Secure Copy) là một công cụ được sử dụng để sao chép hoặc truyền tệp từ hệ thống từ xa sang hệ thống từ xa hoặc hệ thống từ xa sang hệ thống cục bộ. Lệnh scp mã hóa dữ liệu và mật khẩu được gửi đến một hệ thống khác để bảo mật. Thực tế, lệnh scp sử dụng kết nối ssh trong nền để thực hiện truyền tệp. Trong hướng dẫn dưới đây bạn sẽ tìm hiểu cách sử dụng lệnh scp để truyền tệp/thư mục trong Linux.

2. Cú pháp cơ bản của lệnh scp

Cú pháp cơ bản lệnh scp rất đơn giản như sau:

scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

Trong đó:

  • [user@]host1:]: SOURCE_HOST và file1: Đường dẫn tệp nguồn
  • [user@]host2:]: DESTINATION_HOST và file2: Đường dẫn tệp đích

Các tùy chọn thường được sử dụng trong lệnh scp:

  • -r: Sử dụng cho việc truyền các thư mục.
  • -P: Sử dụng cho cổng ssh máy chủ từ xa.
  • -C: Sử dụng để nén dữ liệu trước khi gửi.
  • -c: Sử dụng để chọn mật mã để truyền dữ liệu.

3. Sử dụng lệnh scp

Các ví dụ bên dưới được thực hiện truyền file từ Macbook sang Centos 7.

3.1. Cung cấp thông tin chi tiết về quy trình scp

Lệnh scp không có tham số sẽ sao chép các tệp trong nền. Chúng ta sẽ không thấy gì trừ khi quá trình được thực hiện một số lỗi xuất hiện. Bạn có thể sử dụng tùy chọn -v để in thông tin gỡ lỗi vào màn hình. Qua đó có thể giúp bạn gỡ lỗi các vấn đề về kết nối, xác thực và cấu hình. Thực hiện như bên dưới:

MacBook% scp -v Downloads/test.txt root@192.168.22.183:/
Executing: program /usr/bin/ssh host 192.168.22.183, user root, command scp -v -t /
OpenSSH_7.9p1, LibreSSL 2.7.3
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to 192.168.22.183 [192.168.22.183] port 22.
debug1: Connection established.
...
debug1: Next authentication method: password
root@192.168.22.183's password:
debug1: Authentication succeeded (password).
Authenticated to 192.168.22.183 ([192.168.22.183]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug1: Sending command: scp -v -t /
Sending file modes: C0644 0 test.txt
Sink: C0644 0 test.txt
test.txt                                                                                               100%    0     0.0KB/s   00:00
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Transferred: sent 2268, received 2544 bytes, in 0.3 seconds
Bytes per second: sent 8379.3, received 9399.0
debug1: Exit status 0

3.2. Cung cấp thời gian ước tính và tốc độ kết nối

Lệnh scp cung cấp thời gian ước tính và tốc độ kết nối để truyền tệp. Bạn thực hiện bằng cách sử dụng tùy chọn -p với lệnh scp.

MacBook% scp -p Downloads/CentOS-7-x86_64-Minimal-1611.iso root@192.168.22.183:/
root@192.168.22.183's password:
CentOS-7-x86_64-Minimal-1611.iso                                                                       100%  680MB  51.1MB/s   00:13

3.3. Chuyển nhiều file cùng một lúc

Chúng ta có thể chuyển nhiều file cùng lúc các file được chỉ định cách nhau bởi một khoảng trắng(space) như bên dưới:

MacBook% scp -p Downloads/test.txt Downloads/test1.txt Downloads/test2.txt Downloads/test3.txt root@192.168.22.183:/
root@192.168.22.183's password:
test.txt                                                                                               100%    0     0.0KB/s   00:00
test1.txt                                                                                              100%    0     0.0KB/s   00:00
test2.txt                                                                                              100%    0     0.0KB/s   00:00
test3.txt                                                                                              100%    0     0.0KB/s   00:00

3.4. Sao chép toàn bộ thư mục

Để sao chép toàn bộ thư mục chúng ta sử dụng tùu chọn -r để chỉ định thư mục. Thực hiện như sau:

MacBook% scp -p -r Downloads/TCP:IP root@192.168.22.183:/
root@192.168.22.183's password:
SCAPY-TECHNIQUE.docx                                                                                   100% 5194KB  20.2MB/s   00:00
.DS_Store                                                                                              100% 6148     1.9MB/s   00:00
Du phong static route bang IPSLA.docx                                                                  100%  161KB  10.4MB/s   00:00
Wireshark window 10.pcapng                                                                             100%   18MB  36.9MB/s   00:00
Wireshark kali linux.pcapng                                                                            100%   14MB  40.9MB/s   00:00
Huong dan su dung unetlab eve duoc cai san.docx                                                        100%  374KB  29.8MB/s   00:00
Untitled.txt                                                                                           100% 2209   770.2KB/s   00:00
RIP-with-Scapy.docx                                                                                    100%  115KB  21.0MB/s   00:00
Cau hinh dinh tuyen Tinh.docx                                                                          100%  336KB  33.1MB/s   00:00

3.5. Tăng tốc độ truyền

Chúng ta sử dụng tùy chọn C để tăng tốc độ truyền để tiết kiệm thời gian và băng thông. Các tập tin được nén khi truyền và giải nén ở đích.

Khi chúng ta chưa sử dụng tuỳ chọn C:

MacBook% scp -p Downloads/MANG/Cau-hinh-Active-Directory-Replication-Tren-Windows-server-2012.docx root@192.168.22.183:/ 
root@192.168.22.183's password:
Cau hinh Active Directory Replication Tren Windows server 2012.docx                                    100% 1519KB  13.9MB/s   00:02

Sau khi chúng ta sử dụng tuỳ chọn C:

MacBook% scp -Cp Downloads/MANG/Cau-hinh-Active-Directory-Replication-Tren-Windows-server-2012.docx root@192.168.22.183:/
root@192.168.22.183's password:
Cau hinh Active Directory Replication Tren Windows server 2012.docx                                    100% 1519KB  48.3MB/s   00:01

Qua 2 ví dụ trên cho chúng ta thấy khi sử dụng tuỳ chọn C dữ liệu truyền sẽ nhanh hơn khi chúng ta không sử dụng.

Lưu ý: Phương pháp nén sẽ không hoạt động khi tệp nguồn đã được nén. File có đuôi như .zip, .rar, pictures, và .iso sẽ không bị ảnh hưởng bởi tuỳ chọn C.

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

Tùy chọn l được dùng để hạn chế băng thông sử dụng tính bằng Kbit/s. Nếu bạn không muốn scp chiếm toàn bộ băng thông có sẵn. Chúng ta thực hiện như sau:

# Không sử dụng tùy chọn l
MacBook% scp -p Downloads/pass.docx root@192.168.22.183:/
root@192.168.22.183's password:
pass.docx                                                                                              100% 1059KB  46.2MB/s   00:00
#Sử dụng tùy chọn l
MacBook% scp -pl 400 Downloads/pass.docx root@192.168.22.183:/
root@192.168.22.183's password:
pass.docx                                                                                              100% 1059KB  50.8KB/s   00:20

Giá trị 400 sau tuỳ chọn -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. Trong khi scp tính bằng Kilobyte/giây (KB/s). Vì vậy, nếu bạn muốn giới hạn băng thông cho scp tối đa chỉ 50KB/s, bạn cần đặt nó thành 50 x 8 = 400.

3.7. Chọn một mật mã để mã hóa tập tin

Theo mặc định scp sử dụng AES-128 để mã hóa tập tin. Nếu bạn muốn thay đổi để mật mã khác để mã hóa nó, bạn có thể sử dụng tùy chọn -c. Chúng ta chạy lệnh như sau:

MacBook% scp -c 3des Downloads/test.txt root@192.168.22.183:/
root@192.168.22.183's password:
test.txt                                                                                               100%    0     0.0KB/s   00:00

Lệnh trên cho scp sử dụng thuật toán 3des để mã hóa tệp.

Lưu ý: Đây là tùy chọn -c chứ không phải tùy chọn C

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

Theo mặc định thì lệnh 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 này sang cổng khác.

Ví dụ: Chúng ta đang sử dụng cổng 2019. Thực hiện như bên dưới:

MacBook%scp -P 2019 -p Downloads/test.txt root@192.168.90.182:/
Enter passphrase for key '/Users/dang/.ssh/id_rsa':
test.txt                                                                                                 100%    0     0.0KB/s   00:00

3.9. Vô hiệu hóa đồng hồ đo tiến độ và thông báo

Nếu chúng ta không xem đồng hồ đo tiến độ và các thông báo chẩn đoán từ scp, chúng ta có thể vô hiệu hóa nó bằng cách sử dụng tùy chọn -q. Như bên dưới:

MacBook% scp -q Downloads/test.txt root@192.168.22.183:/
root@192.168.22.183's password:

Qua ví dụ trên cho chúng ta thấy, sau khi nhập mật khẩu không có bất kỳ thông tin nào về quy trình scp.

3.10. Chỉ định file nhận dạng

Khi sử dụng xác thực dựa trên khóa (không sử dụng mật khẩu), bạn sẽ cần chỉ định tệp nhận dạng chứa khóa riêng. Chúng ta chạy lệnh như cú pháp sau:

scp -vCq -i private_key.pem SOURCE_HOST[Đường dẫn tệp nguồn] DESTINATION_HOST[Đường dẫn tệp đích]

3.11. Sử dụng tệp ssh_config

Sử dụng tùy chọn -F để chỉ định tệp ssh_config. Cú pháp như sau:

scp -vC -F /home/user/my_ssh_config SOURCE_HOST[Đường dẫn tệp nguồn] DESTINATION_HOST[Đường dẫn tệp đích]

4. Lời kết

Qua bài trên, giúp cho chúng ta biết cách sử dụng lệnh scp để sao chép hoặc truyền dữ liệu giữa hệ thống từ xa sang hệ thống từ xa hoặc hệ thống từ xa sang hệ thống cục bộ trên hệ điều hành Linux.