
Việc truyền file giữa các máy tính trong mạng nội bộ là nhu cầu cơ bản của mọi lập trình viên và quản trị hệ thống. Dù bạn đang quản lý một server duy nhất hay cả một cụm máy chủ phân tán, việc chuyển file nhanh chóng và an toàn luôn là yếu tố quan trọng. SCP (Secure Copy Protocol) và SFTP (SSH File Transfer Protocol) là hai công cụ phổ biến nhất để thực hiện việc này một cách an toàn qua đường truyền SSH. Cả hai đều mã hóa dữ liệu trong suốt quá trình truyền, chống nghe lén hiệu quả trên mạng không tin cậy.
SCP Là Gì và Khi Nào Nên Dùng
SCP cho phép sao chép file hoặc thư mục giữa các host qua SSH. Dữ liệu được mã hóa bằng giao thức SSH, đảm bảo không ai có thể đọc được nội dung trong quá trình truyền. SCP hoạt động theo mô hình một chiều: chỉ sao chép từ nguồn đến đích, không hỗ trợ duyệt thư mục. Đây là công cụ lý tưởng cho những lần truyền nhanh, đơn giản.
Cú pháp sao chép cục bộ lên remote
scp /đường/dẫn/file.txt user@host:/đường/dẫn/đích/
Cú pháp tải file về từ remote
scp user@host:/đường/dẫn/file.txt /đường/dẫn/đích/
Sao chép thư mục với đệ quy
scp -r /đường/dẫn/thư_mục/ user@host:/đường/dẫn/đích/
Chỉ định cổng SSH tùy chỉnh
scp -P 2222 file.txt user@host:/đường/dẫn/đích/
Sử dụng khóa SSH thay vì mật khẩu
scp -i ~/.ssh/id_ed25519 file.txt user@host:/đường/dẫn/đích/
Giới hạn băng thông SCP
scp -l 1000 file.txt user@host:/đường/dẫn/đích/
Giới hạn băng thông tính bằng Kbit/s, hữu ích khi không muốn chiếm hết đường truyền trên shared network.
SFTP Khác SCP Ở Điểm Gì
SFTP hoạt động như một subsystem của SSH, cung cấp nhiều tính năng hơn SCP đáng kể. Với SFTP, người dùng có thể duyệt thư mục, tiếp tục truyền khi bị gián đoạn, quản lý quyền truy cập file, và thực hiện mọi thao tác file cơ bản từ xa. SFTP đặc biệt hữu ích khi dùng qua giao diện đồ họa với các công cụ như FileZilla hay WinSCP.
Kết nối SFTP cơ bản
sftp user@host
Các lệnh SFTP thường dùng
ls— liệt kê file trên remotecd /đường/dẫn— chuyển thư mục remotelcd /đường/dẫn— chuyển thư mục cục bộpwd— hiển thị thư mục remote hiện tạilpwd— hiển thị thư mục cục bộ hiện tạiget file.txt— tải file về máy cục bộput file.txt— tải file lên remoteget -r thư_mục/— tải thư mục đệ quy vềput -r thư_mục/— tải thư mục lên remote đệ quyrm file.txt— xóa file trên remotermdir thư_mục— xóa thư mục trống trên remotechmod 755 file— thay đổi quyền truy cập filels -l— liệt kê chi tiết file với quyền và kích thước
So Sánh Chi Tiết SCP Và SFTP
| Tính năng | SCP | SFTP |
|---|---|---|
| Đơn giản | Nhanh, một lệnh duy nhất | Yêu cầu phiên tương tác |
| Tiếp tục truyền | Không hỗ trợ resume | Hỗ trợ resume khi bị gián đoạn |
| Duyệt thư mục | Không hỗ trợ | Hỗ trợ duyệt thư mục đầy đủ |
| Tốc độ | Nhanh hơn do đơn giản hơn | Chậm hơn nhẹ do giao thức phức tạp |
| Script automation | Phù hợp cho scripting | Cần công cụ bổ trợ |
| Quản lý quyền | Hạn chế | Chỉnh sửa quyền truy cập file |
| Giao diện đồ họa | Chỉ dòng lệnh | Hỗ trợ FileZilla, WinSCP, Nautilus |
| Bảo mật | SSH encryption | SSH encryption |

Thực Hành: Tự Động Hóa Triển Khai Với SCP
Trong quy trình DevOps hiện đại, việc triển khai code lên server thường dùng SCP kết hợp SSH key authentication để loại bỏ việc nhập mật khẩu. Đây là bước cơ bản nhưng quan trọng trong bất kỳ pipeline CI/CD nào.
Thiết lập SSH key authentication
ssh-keygen -t ed25519 -C "automation-key"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
Script triển khai tự động
#!/bin/bash
set -e
echo "Bắt đầu triển khai..."
scp -r ./build/ user@server:/var/www/app/
ssh user@server "systemctl restart nginx"
echo "Triển khai hoàn tất."
Sử dụng rsync thay cho SCP khi đồng bộ dữ liệu lớn
Rsync qua SSH tiết kiệm băng thông hơn SCP vì chỉ truyền phần file đã thay đổi, không phải toàn bộ nội dung. Đây là lựa chọn tốt hơn cho các tác vụ đồng bộ thường xuyên.
rsync -avz -e ssh ./source/ user@server:/đường/dẫn/đích/
Bảo Mật Khi Truyền File
- Luôn dùng SSH key thay vì mật khẩu để tránh brute force
- Hạn chế quyền truy cập SSH qua chỉ thị
AllowUserstrong sshd_config - Thay đổi cổng SSH mặc định từ 22 để giảm tấn công tự động
- Sử dụng
rsyncqua SSH cho các bản đồng bộ dữ liệu lớn — hiệu quả hơn - Cấu hình
StrictHostKeyCheckingđể chống man-in-the-middle attack - Quét file trước khi truyền bằng
gpghoặcsha256sumđể đảm bảo toàn vẹn - Vô hiệu hóa đăng nhập root qua SSH trong tệp cấu hình

Kết Luận
SCP phù hợp cho việc sao chép nhanh, đơn giản giữa hai máy tính. SFTP phù hợp khi cần quản lý file linh hoạt, đặc biệt khi upload qua giao diện đồ họa với các tool như FileZilla hay WinSCP. Cả hai đều kế thừa bảo mật của SSH, đảm bảo dữ liệu cá nhân không bị rò rỉ khi truyền qua mạng không tin cậy. Lập trình viên nên nắm vững cả hai công cụ này để linh hoạt trong mọi tình huống quản trị hệ thống.
Tham khảo thêm: Trang hướng dẫn SCP trên man7.org và Trang hướng dẫn SFTP trên man7.org.
