在 Linux(以及通用网络环境)中,SFTP 和 FTP 是两种常用于文件传输的协议,但它们在原理、安全性和使用方式上有明显区别。
一、基本定义
1. FTP(File Transfer Protocol)
- 传统的文件传输协议
- 使用 21 端口(控制) + 20 端口(数据,主动模式)
- 明文传输(用户名、密码、文件内容都不加密)
2. SFTP(SSH File Transfer Protocol)
- 基于 SSH(Secure Shell) 的文件传输协议
- 使用 22 端口
- 所有数据(包括认证和文件)都加密传输
二、核心区别对比
| 对比项 |
FTP |
SFTP |
| 底层协议 |
TCP/IP |
SSH |
| 端口 |
21(控制)/20(数据) |
22 |
| 是否加密 |
❌ 明文 |
✅ 加密 |
| 认证方式 |
用户名/密码(明文) |
SSH 密钥 / 密码 |
| 安全性 |
低 |
高 |
| 防火墙友好 |
差(多端口) |
好(单端口) |
| 是否依赖 SSH |
否 |
是 |
| 断点续传 |
部分支持 |
支持较好 |
三、工作方式区别
FTP
- 需要单独安装 FTP 服务(如
vsftpd)
- 有主动/被动模式,容易被防火墙拦截
- 示例:
ftp 192.168.1.10
SFTP
- 只要服务器开启 SSH 即可使用
- 登录方式类似 SSH
sftp user@192.168.1.10
四、安全性说明(重点)
FTP 的风险
- 账号密码可被抓包
- 文件内容可被监听
- 不适合公网环境
SFTP 的优势
- 数据全程加密
- 可禁用密码,只用密钥
- 常用于服务器运维
五、性能与兼容性
- FTP:老系统、嵌入式设备更常见
- SFTP:Linux 服务器首选
- 大文件传输:SFTP 稍慢(加密开销),但更安全
六、Linux 常见使用建议
✅ 推荐
- 服务器之间传文件 → SFTP / SCP
- 公网传输 → 绝不用 FTP
⚠️ 不推荐
七、一句话总结
FTP 是“老式、明文、易用但不安全”;SFTP 是“基于 SSH、加密、安全且现代”。
如果你需要,我也可以帮你:
- 配置 Linux SFTP 服务
- 限制 SFTP 用户只能访问指定目录
- 对比 SCP / Rsync / SFTP 的使用场景