Lệnh SCP – Sao chép từ xa giữa các máy tính
SCP (Secure Copy) là công cụ dòng lệnh trong các hệ thống Linux và Unix. Nó được sử dụng để sao chép từ xa gữa các máy tính. Nó giúp chuyển các tệp và thư mục qua hệ thống một cách an toàn qua mạng. Khi sử dụng lệnh scp để sao chép các tệp và thư mục từ hệ thống cục bộ đến hệ thống từ xa thì trong phần phụ trợ, nó thực hiện kết nối ssh với hệ thống từ xa. Nói cách khác, có thể nói scp sử dụng cùng một cơ chế bảo mật SSH trong phần phụ trợ, nó sử dụng mật khẩu hoặc khóa để xác thực.
Trong hướng dẫn này, chúng ta sẽ thảo luận về lệnh scp trong linux với các ví dụ thực tế.
Lệnh scp có tác dụng 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 chỉ cần biết địa chỉ ip
- SCP dùng ssh để di chuyển dữ liệu, có chế độ bảo mật giống như ssh.
Cài đặt công cụ SCP trên Linux
Thông thường công cụ lệnh sao chép từ xa gữa các máy tính SCP được cài sẵn trên Linux, nếu chưa có thì ta tiến hành cài đặt.
CentOS 6,7:
# yum -y install scp
Trên CentOS 8:
dnf -y install scp
Ubuntu/Debian
# apt-get install scp
Cú pháp của lệnh scp:
Copy từ máy cục bộ đến một máy từ xa:
# scp <options> <files_or_directories> user@target_host:/<folder>
Copy ở máy từ xa về máy cục bộ:
# scp <options> user@target_host:/files <folder_local_system>
Một số tùy chọn <options> được sử dụng rộng rãi nhất trong lệnh scp được liệt kê bên dưới:
-C Enable Compression (cho phép nén dữ liệu)
-i identity File or private key (Tệp nhận dạng hoặc khóa mã)
-l limit the bandwidth while copying (giới hạn băng thông trong khi sao chép, hạn chế ảnh hưởng các tiến trình khác cần băng thông để hoạt động)
-P ssh port number of target host (chỉ định cổng server đích)
-p Preserves permissions, modes and access time of files while copying (Bảo toàn các thông tin như: quyền, chế độ và thời gian truy cập tệp trong khi sao chép)
-q Suppress warning message of SSH (Loại bỏ các thông báo dạng cảnh báo của SSH)
-r Copy files and directories recursively (Sao chép đệ quy các tệp và thư mục)
-v verbose output ( xuất ra nhiều thông tin hơn về những gì chương trình scp đang thực thi ở chế độ nền background – Hữu dụng khi gỡ lỗi sao chép)
Các tùy chọn nếu không có tham số theo sau thì có thể viết gộp cho gọn. Chẳng hạn thay vì viết một loạt tùy chọn: -r -p -v -C ta có thể gộp chúng lại: -Crpv
Các ví dụ sử dụng lệnh scp:
1. Sao chép 1 tập tin từ máy cục bộ sang máy từ xa:
# scp /home/text1.txt root@10.0.0.31:/usr
Lệnh trên sử dụng tài khoản root để copy tập tin text1.txt từ thư mục /home trên máy cục bộ đến thư mục /usr trên máy từ xa (máy đích có địa chỉ ip là 10.0.0.31). hệ thống yêu cầu bạn nhập mật khẩu của tài khoản root trên máy từ xa để chứng thực như dưới đây.
[root@centos8 ~]# scp /home/text1.txt root@10.0.0.31:/usr root@10.0.0.31's password: text1.txt 100% 56 110.2KB/s 00:00 [root@centos8 ~]#
Nếu là lần đầu tiên thiết lập kết nối đến máy từ xa hệ thống sẽ hỏi xác thực. Bạn trả lời yes là được.
The authenticity of host ‘10.0.0.31 (10.0.0.31)’ can’t be established.
ECDSA key fingerprint is SHA256:hSFEZCsTfkFLpblGSL7CpI8SJ/RkLxQNcYLV9dXyw0Y.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Sao chép một tệp từ máy windows sang máy linux:
2. Sao chép một tệp trên máy từ xa về máy cục bộ
Giả sử chúng ta muốn sao chép một tệp từ hệ thống từ xa sang hệ thống cục bộ của chúng ta và đặt vào thư mục /tmp, hãy thực hiện lệnh scp sau:
# scp root@10.0.0.31:/usr/text1.txt /tmp
Kết quả:
[root@centos8 ~]# scp root@10.0.0.31:/usr/text1.txt /tmp root@10.0.0.31's password: text1.txt 100% 56 71.9KB/s 00:00 [root@centos8 ~]#
3. Chuyển nhiều tệp sang hệ thống từ xa
Cú pháp chung có dạng:
# scp file1 file2 username@remotehost:/path/directory/
Nhiều tệp có thể được sao chép / chuyển đến hệ thống từ xa bằng lệnh scp trong một lần. các tệp được phân tách nhau bằng dấu cách:
[root@centos8 home]# scp text1.txt text2.txt root@10.0.0.31:/usr root@10.0.0.31's password: text1.txt 100% 56 176.2KB/s 00:00 text2.txt 100% 56 227.5KB/s 00:00 [root@centos8 home]#
4. Copy toàn bộ thư mục và file lên máy chủ remote
Để copy toàn bộ thư mục từ máy chủ này đến máy chủ khác ta thêm option ‘-r‘ để chỉ định sao chép đệ quy:
# scp -r /home/cuongcong root@10.0.0.31:/home/cuongcong
5. Copy giữa hai máy chủ từ xa
Bạn đang đứng trên máy chủ A, vẫn có thể thực hiện lệnh scp để copy file từ máy B sang máy C bằng lệnh có cú pháp như sau:
# scp user1@remotehost1:/dir/file.txt user2@remotehost2:/dir/
Lệnh này copy file.txt trên thư mục /dir ở host1 sang thư mục /dir ở host 2
# scp root@10.0.0.34:/cuongcong/text1.txt root@10.0.0.31:/home root@10.0.0.34's password: root@10.0.0.31's password: text1.txt 100% 56 192.4KB/s 00:00 Connection to 10.0.0.34 closed. [root@lamp36 ~]#
6. Bật nén – Tăng tốc độ truyền file
Trong lệnh scp, chúng ta có thể tăng tốc độ truyền bằng cách cho phép nén bằng tùy chọn -C, nó sẽ tự động cho phép nén tại nguồn và giải nén tại máy chủ đích.
[root@centos8 home]# scp -C -r /home root@10.0.0.31:/usr/home root@10.0.0.31's password: text1.txt 100% 56 138.4KB/s 00:00 text2.txt 100% 56 186.9KB/s 00:00 [root@centos8 home]#
7. Giới hạn băng thông sử dụng khi truyền file
Sử dụng tùy chọn ‘-l’ trong lệnh scp để giới hạn việc sử dụng băng thông trong khi sao chép. Băng thông được chỉ định bằng Kbit/s, ví dụ được hiển thị bên dưới:
[root@centos]# scp -Cr -l 500 /home root@10.0.0.31:/usr/home root@10.0.0.31's password: text1.txt 100% 56 173.8KB/s 00:00 text2.txt 100% 56 295.6KB/s 00:00 [root@centos8 home]#
8. Chỉ định cổng ssh khác 22 trong khi scp (-P)
Cổng mặc định cho dịch vụ ssh trên các máy chủ là 22, tuy nhiên rất nhiều máy chủ vì lý do bảo mật hoặc trùng port đã thực hiện ssh trên các cổng khác với port 22 truyền thống. Tùy chọn -P sẽ cho phép bạn chỉ định thực hiện lệnh scp trên một port ssh cụ thể của máy chủ.
[root@centos]# scp -r -P 3622 /home root@10.0.0.36:/usr/home root@10.0.0.36's password: text1.txt 100% 56 65.1KB/s 00:00 text2.txt 100% 56 139.7KB/s 00:00 [root@centos8 home]#
9. Bảo toàn quyền, chế độ và thời gian truy cập tệp trong khi sao chép (-p)
Sử dụng tùy chọn “-p” trong lệnh scp để bảo toàn quyền, thời gian truy cập và chế độ trong khi sao chép từ nguồn đến đích
[root@centos8]# scp -Crp /home root@10.0.0.31:/usr/home root@10.0.0.31's password: text1.txt 100% 56 176.3KB/s 00:00 text2.txt 100% 56 263.5KB/s 00:00 [root@centos8 home]#
10. Quiet mode – Bật chế độ im lặng, yên tĩnh
Sử dụng tùy chọn ‘-q’ trong lệnh scp để chặn tiến trình truyền, thông báo cảnh báo và chẩn đoán của ssh.
[root@centos8 home]# scp -qr /home root@10.0.0.31:/usr/home root@10.0.0.31's password: [root@centos8 home]#
Không có thông báo nào khi thực hiện scp với -q
11. Sử dụng Nhận dạng tệp trong scp khi truyền (-i)
Trong trường hợp bạn sử dụng xác thực SSH bằng key, khi đó bạn sẽ cần chỉ định file chứa private key:
# scp -i my_key.pem /test.txt root@10.0.0.31:/home/test.txt
12. Sử dụng tệp ‘ssh_config’ khác (-F):
Bình thường lệnh scp sẽ sử dụng file ssh_config mặc định. Tuy nhiên có một số trường hợp bạn sử dụng các mạng khác nhau để kết nối với hệ thống Linux, có thể một số mạng nằm sau máy chủ proxy, vì vậy trong trường hợp đó chúng ta phải có tệp ssh_config khác.
Tệp ssh_config khác nhau trong lệnh scp được chỉ định thông qua tùy chọn ‘-F’
[root@centos8]# scp -F /home/new_ssh_config -r Downloads \ root@10.0.0.34:/root root@10.0.0.34's password: jdk-linux-x64_bin.rpm 100% 10MB 16.6MB/s 00:00 backup-Oct.zip 100% 713MB 41.9MB/s 00:17 index.html 100% 85KB 6.6MB/s 00:00 [root@centos8]#
13. Sử dụng thuật toán mã hóa khác
Theo mặc định, scp sử dụng mật mã ‘AES-128’ để mã hóa các tệp. Nếu bạn muốn sử dụng một mật mã khác trong lệnh scp thì hãy sử dụng tùy chọn ‘-c’ theo sau là tên mật mã (blowfish, arcfour, 3des-cbc..). 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-128 nhưng bảo mật lại kém hơn, chỉ nên thực hiện trong hệ thống mạng nội bộ an toàn, kho đó bạn sẽ được đổi lại là tốc độ truyền file.
Giả sử chúng ta muốn sử dụng mật mã ‘3des-cbc’ trong lệnh scp trong khi chuyển tệp, hãy chạy lệnh scp sau
[root@cent8]# scp -c 3des-cbc -r Downloads root@10.0.0.32:/root
Sử dụng lệnh dưới đây để liệt kê các mật mã ssh và scp:
[root@centos8 home]# ssh -Q cipher localhost | paste -d , -s -
Bạn sẽ được kết quả:
3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,rijndael-cbc@lysator.liu.se,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com [root@centos8 home]#
14. Verbose Output – Thông tin chi tiết trong khi chuyển tệp
Trong lệnh scp, chúng ta có thể kích hoạt đầu ra chi tiết bằng cách sử dụng tùy chọn -v, sử dụng đầu ra chi tiết, chúng ta có thể dễ dàng tìm thấy chính xác những gì đang xảy ra khi scp đang chạy dưới chế độ nền (backgroud). Điều này rất hữu ích trong việc gỡ lỗi các vấn đề về kết nối, xác thực và cấu hình.
# scp -v jdk-linux-x64_bin.rpm root@10.0.0.31:/opt Executing: program /usr/bin/ssh host 10.0.0.31, user root, command scp -v -t /opt OpenSSH_7.8p1, OpenSSL 1.1.1 FIPS 11 Sep 2018 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config debug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for * debug1: Connecting to 10.0.0.31 [10.0.0.31] port 22. debug1: Connection established. ………… debug1: Next authentication method: password root@10.0.0.31's password:
Kết luận
Lệnh scp – Sao chép từ xa giữa các máy tính là một lệnh rất hay dùng trong linux. SCP giúp bạn truyền dữ liệu được mã hóa trên đường truyền từ máy này qua máy kia. Bao nhiêu đó là tất cả từ hướng dẫn này, để biết thêm chi tiết về lệnh scp, vui lòng tham khảo trang người dùng của nó. Vui lòng chia sẻ phản hồi và nhận xét của bạn trong phần bình luận bên dưới. Chúc các bạn vui vẻ.