FTP 与 SFTP
ftp-sftp;文件传输选型。
25 分钟
FTP 与文件传输协议
FTP(File Transfer Protocol)是经典的文件传输协议,端口 21(控制)+ 20(主动模式数据) 或 被动模式高位端口。现代 DevOps 更推荐 SFTP/SCP(走 SSH),但 FTP 仍在遗留系统、共享主机、IoT 固件分发中存在。本课衔接 networking-essentials 端口与防火墙知识,结合 linux-essentials 服务管理;安全替代方案见上一课 dnm-ssh。
学习目标
- 理解 FTP 主动模式 vs 被动模式 及防火墙影响
- 会用
lftp、ftp客户端上传下载文件 - 知道何时选 FTP、何时必须用 SFTP/SCP
FTP 工作模式
| 模式 | 控制连接 | 数据连接方向 | 防火墙难点 |
|---|---|---|---|
| 主动 (Active) | 客户端 → 服务器:21 | 服务器:20 → 客户端 | 客户端防火墙拦 inbound |
| 被动 (Passive) | 客户端 → 服务器:21 | 客户端 → 服务器:高位端口 | 需开放 passive 端口范围 |
被动模式(常见)
Client ──► Server:21 (控制: USER/PASS/ PASV)
Client ──► Server:50000 (数据: LIST/RETR/STOR)
客户端操作
# 命令行 FTP(不推荐生产,明文密码)
ftp ftp.example.com
# ftp> user anonymous
# ftp> cd pub
# ftp> get readme.txt
# lftp(支持 FTPS、断点续传)
lftp -u username,password ftp.example.com
lftp username@ftp.example.com:~> ls
lftp username@ftp.example.com:~> mirror /remote/dir ./local-dir
lftp username@ftp.example.com:~> put deploy.zip
FTPS vs SFTP
| FTP/FTPS | SFTP | |
|---|---|---|
| 协议栈 | 独立 FTP + TLS | SSH 子系统 |
| 端口 | 21 + 数据端口 | 22 |
| 加密 | FTPS 可选 TLS | 全程加密 |
| DevOps 推荐 | 遗留兼容 | ✅ 默认选择 |
# SFTP(推荐,见 dnm-ssh)
sftp user@server.example.com
sftp> put app.jar /opt/deploy/
Linux 上搭建 vsftpd(了解即可)
/etc/vsftpd/vsftpd.conf 关键项:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=50100
ssl_enable=YES