SFTP (SSH File Transfer Protocol) là một giao thức truyền tệp dựa trên SSH (Secure Shell), được sử dụng để truyền tải các tệp giữa máy khách và máy chủ một cách an toàn thông qua kênh mã hóa. Khác với FTP (File Transfer Protocol), SFTP là một giao thức độc lập, sử dụng kênh mã hóa của SSH để truyền dữ liệu, cung cấp mức độ bảo mật cao hơn so với FTP truyền thống và thường được ưu tiên trong các ứng dụng doanh nghiệp.
Một số đặc điểm nổi bật của SFTP:
- Bảo mật: Tất cả dữ liệu (bao gồm tên người dùng, mật khẩu, nội dung tệp) đều được mã hóa thông qua SSH, ngăn chặn việc truy cập trái phép hoặc thay đổi nội dung (FTP truyền dữ liệu dưới dạng văn bản thuần túy, dễ bị tấn công).
- Hỗ trợ đầy đủ chức năng: Không chỉ hỗ trợ tải lên/tải xuống tệp, SFTP còn cho phép thực hiện các thao tác quản lý thư mục như tạo, xóa, chuyển đổi thư mục, chỉnh sửa quyền truy cập, đổi tên tệp, tương tự như quản lý tệp cục bộ.
- Tương thích đa nền tảng: Hầu hết các hệ thống Linux/Unix đều hỗ trợ sẵn (qua thành phần
openssh-sftp-server), còn Windows có thể kết nối thông qua các công cụ như PuTTY, FileZilla, đảm bảo khả năng tương thích tốt. - Sử dụng duy nhất một cổng: Chỉ cần cổng 22 của SSH để hoạt động, không cần mở cổng 21 (điều khiển) và các cổng dữ liệu ngẫu nhiên như FTP, giúp đơn giản hóa cấu hình tường lửa.
Cách thức hoạt động của SFTP dựa trên SSH:
SFTP sử dụng giao thức SSH để thiết lập kết nối an toàn theo các bước sau:
- Kết nối SSH: Máy khách gửi yêu cầu kết nối SSH đến cổng 22 của máy chủ.
- Xác thực danh tính: Máy chủ xác thực danh tính của máy khách (bằng mật khẩu hoặc cặp khóa SSH).
- Tạo kênh mã hóa: Sau khi xác thực thành công, cả hai bên thiết lập một phiên SSH mã hóa.
- Truyền tệp: Thực hiện các lệnh SFTP (tải lên, tải xuống, thao tác thư mục, v.v.) thông qua kênh mã hóa này, tất cả dữ liệu đều được mã hóa.
Các thao tác cơ bản của SFTP: dòng lệnh và công cụ
1. Kết nối tới máy chủ SFTP bằng dòng lệnh
Đặc biệt, các hệ thống Linux/macOS có sẵn lệnh sftp, còn Windows có thể sử dụng PowerShell hoặc Git Bash.
Cú pháp kết nối:
sftp [tên_người_dùng@]địa_chỉ_IP_hoặc_tên_mạng # cổng mặc định là 22, nếu sử dụng cổng khác thêm -P số_cổng
Ví dụ:
sftp root@192.168.1.100 # kết nối tới máy chủ 192.168.1.100, người dùng root, cổng mặc định 22
sftp -P 2222 user@example.com # kết nối tới máy chủ ở cổng 2222
Sau khi kết nối thành công, bạn sẽ ở chế độ tương tác SFTP (prompt hiển thị là sftp>) và có thể thực thi các lệnh SFTP.
2. Các lệnh SFTP phổ biến (chế độ tương tác)
Lệnh SFTP tương tự như các lệnh quản lý tệp trong Linux, một số lệnh quan trọng bao gồm:
| Lệnh | Mô tả chức năng | Ví dụ |
| ls [thư_mục] | Liệt kê các tệp trong thư mục chỉ định trên máy chủ (mặc định là thư mục hiện tại) | ls /home # liệt kê các tệp trong thư mục /home trên máy chủ |
| cd thư_mục | Chuyển đổi thư mục làm việc trên máy chủ | cd /var/log # chuyển sang thư mục /var/log trên máy chủ |
| pwd | Hiển thị thư mục làm việc hiện tại trên máy chủ | pwd # hiển thị: /home/user |
| lcd thư_mục | Chuyển đổi thư mục làm việc trên máy khách | lcd ~/downloads # chuyển sang thư mục downloads trên máy khách |
| get tệp_máy_chủ [tên_tệp_địa_phương] | Tải về tệp từ máy chủ sang máy khách (có thể chỉ định tên tệp mới) | get app.log # tải về app.log vào thư mục hiện tại trên máy khách; get app.log local.log # đổi tên thành local.log |
| put tệp_máy_khách [tên_tệp_máy_chủ] | Tải lên tệp từ máy khách lên máy chủ (có thể chỉ định tên tệp mới) | put report.pdf # tải lên report.pdf vào thư mục hiện tại trên máy chủ |
| mkdir thư_mục | Tạo thư mục mới trên máy chủ | mkdir backups # tạo thư mục backups trong thư mục hiện tại trên máy chủ |
| rm tệp | Xóa tệp trên máy chủ | rm old.log # xóa tệp old.log trên máy chủ |
| rmdir thư_mục | Xóa thư mục trống trên máy chủ | rmdir temp # xóa thư mục trống temp |
| rename tên_cũ tên_mới | Đổi tên tệp/thư mục trên máy chủ | rename file.txt new.txt |
| chmod quyền tệp | Thay đổi quyền truy cập của tệp trên máy chủ (ví dụ: 644, 755) | chmod 644 config.ini |
exit/quit |
Kết thúc kết nối SFTP | exit |
3. Kỹ thuật nâng cao
- Tải lên/tải xuống hàng loạt: Sử dụng tùy chọn
-rđể tải xuống hoặc tải lên các thư mục đệ quy. - Tải tiếp tục: Hỗ trợ tải tiếp tục sau khi kết nối bị gián đoạn (nếu máy chủ hỗ trợ).
- Đăng nhập bằng khóa SSH (không cần mật khẩu):
- Tạo cặp khóa SSH trên máy khách (
ssh-keygen -t rsa, nhấn Enter liên tục). - Thêm khóa công khai (
~/.ssh/id_rsa.pub) vào tệp~/.ssh/authorized_keystrên máy chủ. - Kết nối sau này không cần nhập mật khẩu:
sftp user@server.
- Tạo cặp khóa SSH trên máy khách (
4. Công cụ đồ họa (phù hợp với người mới bắt đầu)
Nếu bạn chưa quen với dòng lệnh, có thể sử dụng các công cụ SFTP đồ họa, tương tự như các trình duyệt FTP:
- FileZilla (multi-platform): Miễn phí mã nguồn mở, hỗ trợ Windows/macOS/Linux, giao diện trực quan, kéo thả để truyền tệp.
- WinSCP (Windows): Kết hợp SFTP và SCP, hỗ trợ chỉnh sửa văn bản, đồng bộ hóa thư mục, phù hợp với người dùng Windows.
- Cyberduck (macOS): Chuyên dụng cho macOS, giao diện đơn giản, hỗ trợ nhiều lưu trữ đám mây và giao thức SFTP.
SFTP so với FTP và SCP
| Giao thức | SFTP | FTP | SCP |
| Cơ sở | SSH | Giao thức độc lập | SSH |
| Bảo mật | Mã hóa dữ liệu, an toàn cao | Truyền dữ liệu dưới dạng văn bản, an toàn thấp | Mã hóa dữ liệu, an toàn cao |
| Chức năng | Hỗ trợ quản lý tệp, chỉnh sửa quyền, v.v. | Chỉ hỗ trợ truyền tải tệp cơ bản | Chỉ hỗ trợ truyền tải tệp/thư mục |
| Cổng | 22 | 21 | 22 |
| Các trường hợp sử dụng | Truyền tệp doanh nghiệp, dữ liệu nhạy cảm | Truyền tệp công khai không nhạy cảm | Truyền tải tự động thông qua kịch bản (không tương tác) |
Tóm lại, SFTP kết hợp giữa bảo mật và chức năng, phù hợp với hầu hết các tình huống; SCP phù hợp với việc truyền tải tự động thông qua kịch bản (lệnh ngắn gọn hơn); FTP chỉ nên sử dụng trong các tình huống không nhạy cảm.
Cấu hình máy chủ SFTP (ví dụ trên Linux)
Máy chủ Linux cung cấp dịch vụ SFTP thông qua openssh-server, không cần cài đặt bổ sung, chỉ cần cấu hình đơn giản để hạn chế quyền truy cập của người dùng (ví dụ: chỉ cho phép truy cập vào thư mục chỉ định).
Các bước:
- Kiểm tra và cài đặt
openssh-server:
# Ubuntu/Debian
sudo apt install openssh-server
# CentOS/RHEL
sudo yum install openssh-server
- Khởi động dịch vụ SSH và thiết lập khởi động cùng hệ thống:
sudo systemctl start sshd
sudo systemctl enable sshd
- (Tùy chọn) Hạn chế thư mục SFTP của người dùng (củng cố bảo mật): Chỉnh sửa tệp cấu hình SSH
/etc/ssh/sshd_config, thêm các cấu hình sau (hạn chế người dùngsftpuserchỉ có thể truy cập/home/sftpuser):
Match User sftpuser # khớp người dùng sftpuser
ChrootDirectory /home/sftpuser # hạn chế thư mục gốc (phải là thư mục mà người dùng không thể ghi)
ForceCommand internal-sftp # bắt buộc sử dụng SFTP, ngăn chặn đăng nhập SSH
X11Forwarding no
AllowTcpForwarding no
- Lưu lại và khởi động lại dịch vụ SSH:
sudo systemctl restart sshd
Các vấn đề thường gặp và giải pháp
- Kết nối quá thời gian chờ:
- Kiểm tra địa chỉ IP, cổng của máy chủ (mặc định là 22).
- Xác nhận tường lửa máy chủ cho phép cổng 22 (
sudo ufw allow 22hoặcfirewall-cmd --add-port=22/tcp).
- Quyền truy cập không đủ:
- Khi tải lên tệp, đảm bảo thư mục đích trên máy chủ có quyền ghi cho người dùng hiện tại (
chmod 755 thư_mục). - Nếu kích hoạt
ChrootDirectory, đảm bảo thư mục gốc sở hữu bởi root và có quyền 755.
- Khi tải lên tệp, đảm bảo thư mục đích trên máy chủ có quyền ghi cho người dùng hiện tại (
- Đăng nhập bằng khóa thất bại:
- Kiểm tra quyền của tệp
~/.ssh/authorized_keyslà 600 (chmod 600 authorized_keys). - Xác nhận nội dung khóa công khai đã sao chép chính xác, không có khoảng trắng hay ký tự xuống dòng thừa.
- Kiểm tra quyền của tệp
SFTP nhờ vào tính bảo mật cao, chức năng đa dạng và dễ dàng cấu hình trở thành lựa chọn tiêu chuẩn cho việc truyền tệp doanh nghiệp. Dù sử dụng dòng lệnh hay công cụ đồ họa, nắm vững SFTP sẽ giúp bạn truyền tải tệp giữa máy cục bộ và máy chủ một cách an toàn và hiệu quả, là kỹ năng cần thiết cho quản trị và vận hành máy chủ. Đối với việc truyền tải dữ liệu nhạy cảm như nhật ký, tập tin cấu hình, dữ liệu kinh doanh, SFTP là lựa chọn thay thế hoàn hảo cho FTP.