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.