Di chuyển file giữa các hệ thống Linux với SCP

Khi truyền file đến máy chủ Linux từ xa, bạn có một số tùy chọn. Một trong những cách tốt nhất là sử dụng chương trình có tên Secure Copy hoặc SCP, chạy qua giao thức SSH để nhanh chóng chuyển file qua mạng sang hệ thống từ xa. Hướng dẫn này chỉ cho bạn cách truyền file an toàn bằng SCP trong Linux.

Cấu hình SSH

Trên máy chủ từ xa, bạn sẽ cần cài đặt SSH server. Phổ biến nhất trên Linux là OpenSSH server. Để cài đặt nó, hãy chạy một trong các lệnh sau:

Server dựa trên Debian/Ubuntu:

sudo apt install ssh

Fedora:

sudo dnf install openssh
Cài đặt SSH server
Cài đặt SSH server

Tùy thuộc vào bản phân phối, bạn có thể cần cho phép SSH thông qua một số tường lửa phần mềm. Trên Ubuntu, vấn đề này không tồn tại, nhưng trên Fedora, bạn cũng sẽ phải chạy các lệnh sau:

sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
Cho phép SSH thông qua một số tường lửa phần mềm
Cho phép SSH thông qua một số tường lửa phần mềm

Kết nối với hệ thống qua SSH

Trước khi có thể kết nối qua SSH, bạn cần tìm ra địa chỉ IP của máy chủ từ xa. Trên các máy chủ đồ họa, địa chỉ IP được hiển thị trong applet Network thuộc System Settings. Trên hầu hết các máy chủ, bạn nên sử dụng lệnh ip trong terminal.

ip addr
Tìm ra địa chỉ IP của máy chủ từ xa
Tìm ra địa chỉ IP của máy chủ từ xa

Ở đầu ra, hãy tìm dòng bắt đầu bằng inet trong ethX hoặc enpXsy, tùy thuộc vào cách network interface của bạn được kết nối với hệ thống. Trong trường hợp ví dụ, đó là 192.168.68.108.

Để kiểm tra kết nối SSH, hãy chuyển sang một máy Linux khác và gõ:

ssh user@remote.machine.ip.address

Thay đổi “user” thành tên người dùng thực trong máy chủ.

Kiểm tra kết nối SSH
Kiểm tra kết nối SSH

Nhập mật khẩu cho tài khoản đó. Nếu bạn nhận được câu hỏi về “authenticity of host can’t be established" (không thể thiết lập tính xác thực của host), chỉ cần trả lời “yes”. Đây là một kiểm tra bảo mật được thiết kế để đảm bảo rằng bạn đang kết nối với máy chủ thực của mình chứ không phải kẻ mạo danh. Bạn sẽ thấy lời nhắc tương tự xuất hiện trên hệ thống client mà bạn thấy khi đăng nhập trực tiếp vào máy chủ, điều đó có nghĩa là kết nối của bạn đã thành công. Bạn cũng nên cấu hình các kết nối SSH của mình để bảo mật tối đa hoặc thậm chí thiết lập xác thực hai yếu tố trước khi chuyển sang bước tiếp theo.

Sử dụng SCP để truyền file

Bây giờ, bạn đã kiểm tra kết nối SSH, hãy bắt đầu sao chép file giữa hai máy. Sao chép an toàn đạt được bằng cách sử dụng lệnh scp. Định dạng cơ bản của lệnh scp là:

scp /PATH/TO/FILE USER@IP-ADDRESS:PATH/TO/DESIRED/DESTINATION

Ví dụ, để sao chép file “backup.tar.gz” từ máy cục bộ vào thư mục “backups” trong thư mục home của người dùng “ramces” trên máy chủ từ xa có địa chỉ IP là 192.168.68.165, hãy sử dụng lệnh:

scp backup.tar.gz ramces@192.168.68.165:~/backups/
Sao chép file giữa hai máy
Sao chép file giữa hai máy

Tương tự như khi kết nối bằng ssh, bạn sẽ được nhắc nhập mật khẩu. Bạn sẽ không được nhắc nhập tên người dùng, vì tên người dùng đã được chỉ định trong lệnh.

Bạn cũng có thể sử dụng các ký tự đại diện như sau:

scp *.tar.gz ramces@192.168.68.165:~/backups/
Sử dụng các ký tự đại diện
Sử dụng các ký tự đại diện

Để sao chép file từ máy chủ từ xa sang máy cục bộ, chỉ cần đảo ngược các tham số:

scp ramces@192.168.68.165:~/backups/backup.tar.gz ./
Sao chép file từ máy chủ từ xa sang máy cục bộ
Sao chép file từ máy chủ từ xa sang máy cục bộ

Chú ý dấu chấm ở cuối lệnh - nó có nghĩa là "thư mục hiện tại", giống như với các lệnh cp hoặc mv tiêu chuẩn. Bạn có thể dễ dàng chỉ định một số thư mục khác nếu muốn.

scp -r ramces@192.168.68.165:~/backups/ backups-from-server/

Và tương tự với ký tự đại diện:

scp ramces@192.168.68.165:~/backups/*.txz ./

Để sao chép đệ quy một thư mục vào máy chủ từ xa, hãy sử dụng tùy chọn -r:

scp -r backups/ ramces@192.168.68.165:~/backups/
Sao chép đệ quy một thư mục vào máy chủ từ xa
Sao chép đệ quy một thư mục vào máy chủ từ xa

Để sao chép một bản sao đệ quy của một thư mục từ máy chủ từ xa sang máy cục bộ, hãy sử dụng:

scp -r ramces@192.168.68.165:~/backups/ ./
Sao chép một bản sao đệ quy của một thư mục từ máy chủ từ xa sang máy cục bộ
Sao chép một bản sao đệ quy của một thư mục từ máy chủ từ xa sang máy cục bộ

Nén quá trình truyền file trong SCP

Ngoài việc sao chép cơ bản, cũng có thể sửa đổi cách SCP hoạt động trong quá trình truyền file này. Ví dụ, bạn có thể sử dụng flag -C để nén dữ liệu mà SCP gửi cho các client từ xa:

scp -C backup.tar.gz ramces@192.168.68.165:/home/ramces/

Tùy chọn này hoạt động bằng cách nén từng gói dữ liệu khi nó được gửi qua chương trình SCP. Do đó, điều này có thể cực kỳ hữu ích nếu bạn đang ở trong một kết nối bị giới hạn băng thông và muốn gửi file đến một máy chủ từ xa một cách đáng tin cậy.

Sử dụng flag -C để nén dữ liệu
Sử dụng flag -C để nén dữ liệu

Tương tự như các tùy chọn ở trên, bạn cũng có thể sử dụng -C cùng với flag -r để nén đệ quy và truyền file sang máy từ xa. Ví dụ, lệnh sau sẽ nén và truy xuất file “backup.tar.gz” từ máy chủ từ xa trong bài:

scp -Cr ramces@192.168.68.165:/home/ramces/backups /home/ramces/
Nén đệ quy và truyền file sang máy từ xa
Nén đệ quy và truyền file sang máy từ xa

Tối ưu hóa việc truyền dữ liệu với SCP

Phần lớn, SCP cố gắng sử dụng thuật toán mã hóa AES-128 cho tất cả các lần truyền file của nó. Tuy nhiên, có những trường hợp thuật toán cụ thể này sẽ không phù hợp với các file bạn muốn chuyển.

Biết được điều đó, bạn có thể tối ưu hóa và bảo mật SCP hơn nữa bằng cách thay đổi trực tiếp thuật toán mã hóa cho một lần chuyển cụ thể. Để thực hiện việc này, bạn cần sử dụng flag -c theo sau là mật mã mà bạn muốn sử dụng.

Ví dụ, lệnh sau chuyển file “backup.tar.gz” sang máy chủ từ xa bằng AES-256:

scp -c aes256-ctr ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Chuyển file sang máy chủ từ xa
Chuyển file sang máy chủ từ xa

Hơn nữa, tùy chọn -c cũng cho phép bạn cung cấp danh sách mật mã mà bạn muốn sử dụng để truyền file cụ thể. Ví dụ, lệnh sau sử dụng cả AES-192 và AES-256 trong khi truyền file “backup.tar.gz” sang máy chủ từ xa:

scp -c aes192-ctr,aes256-ctr ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Sử dụng cả AES-192 và AES-256 trong khi truyền file
Sử dụng cả AES-192 và AES-256 trong khi truyền file

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

Mặc dù việc nén các gói file có thể giúp bạn sử dụng SCP trong điều kiện mạng kém, nhưng cũng có thể hạn chế băng thông mà chương trình sử dụng trong quá trình truyền. Điều này hữu ích trong trường hợp bạn đang sử dụng kết nối có giới hạn và không muốn SCP chi phối băng thông mạng của mình.

Để giới hạn băng thông hiệu quả của chương trình, bạn cần sử dụng flag -l theo sau là giới hạn trên tính bằng kilobit trên giây (Kb/s). Ví dụ, chạy lệnh sau sẽ chuyển file “backup.tar.gz” sang máy chủ từ xa với băng thông hiệu quả là 1.600 Kb/s:

scp -l 1600 ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Hạn chế sử dụng băng thông trong SCP
Hạn chế sử dụng băng thông trong SCP

Chuyển file giữa nhiều máy chủ từ xa với SCP

Ngoài việc sao chép các file cục bộ sang máy chủ từ xa của bạn và ngược lại, bạn cũng có thể sử dụng SCP để quản lý nhiều máy chủ từ xa từ máy cục bộ của mình, vì SCP chỉ xử lý việc truyền file và không phân biệt giữa máy cục bộ và máy từ xa.

Để chuyển giữa hai máy chủ từ xa, bạn cần nêu rõ tên người dùng và địa chỉ của từng máy đó. Ví dụ, chạy lệnh sau sẽ chuyển file “remote-backup.tar.gz” giữa hai máy chủ từ xa:

scp ramces@192.168.68.108:/home/ramces/remote-backup.tar.gz ramces@192.168.68.165:/home/ramces/
Chuyển file giữa nhiều máy chủ từ xa với SCP
Chuyển file giữa nhiều máy chủ từ xa với SCP

Sử dụng proxy với SCP

Theo mặc định, SCP sử dụng địa chỉ IP của máy cục bộ bất cứ khi nào nó truyền file giữa các máy chủ khác nhau. Mặc dù điều này hoàn toàn ổn trong các tình huống bình thường, nhưng nó có thể là một vấn đề nếu mạng cục bộ của bạn hạn chế bất kỳ hoạt động nào của SCP. Một cách nhanh chóng để giải quyết vấn đề này là chuyển kết nối cục bộ của bạn thông qua SSH proxy.

Để thực hiện việc này, bạn cần sử dụng flag -o theo sau là tùy chọn ProxyCommand. Điều này cho phép bạn tạo một kết nối SSH cơ bản tới một máy mới, đến lượt nó sẽ thực thi lệnh SCP của bạn. Ví dụ, chạy phần sau sẽ tạo một SSH proxy mới với một máy từ xa và chuyển file “backup.tar.gz” bằng cách sử dụng nó:

scp -o "ProxyCommand ssh ramces@192.168.68.108 nc %h %p" ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Sử dụng proxy với SCP
Sử dụng proxy với SCP

Thay đổi cổng mặc định trong SCP

Ngoài việc tạo SSH proxy cơ bản, bạn cũng có thể thay đổi cổng mặc định cho SCP. Điều này đặc biệt hữu ích nếu bạn đang bảo mật máy chủ Linux của mình và không muốn để lộ bất kỳ cổng mặc định nào.

Để sử dụng SCP với một cổng khác, bạn cần sử dụng flag -P theo sau là số cổng mà bạn muốn sử dụng. Ví dụ, lệnh sau sẽ sao chép đệ quy thư mục “backup” và kết nối với máy chủ từ xa bằng cổng 2222:

scp -r -P 2222 ./backup ramces@192.168.68.165:/home/ramces/
Thay đổi cổng mặc định trong SCP
Thay đổi cổng mặc định trong SCP

Sử dụng Quite mode trong SCP

Cuối cùng, cũng có thể loại bỏ hoàn toàn bất kỳ đầu ra terminal nào khỏi lệnh SCP. Điều này đặc biệt hữu ích nếu bạn muốn tạo một script không tương tác sẽ chạy trong máy của mình. Không chỉ vậy, bạn còn có thể tự động hóa hoàn toàn quy trình này bằng cách tạo một cronjob và chuyển SSH private key tới máy chủ của bạn.

Để thực hiện việc này, bạn cần sử dụng flag -q. Ví dụ, lệnh sau sẽ âm thầm chuyển file “backup.tar.gz” đến máy chủ từ xa:

scp -q ./backup.tar.gz ramces@192.168.68.165:/home/ramces/
Sử dụng Quite mode trong SCP
Sử dụng Quite mode trong SCP
Thứ Sáu, 06/01/2023 09:49
3,47 👨 11.486
0 Bình luận
Sắp xếp theo
    ❖ Linux