一、SFTP 是什么
SFTP(SSH File Transfer Protocol,SSH文件传输协议),应用层协议。
⚠️ 重点区分:SFTP并不是FTP+SSL,也不是FTPS;SFTP是基于SSH协议之上的文件传输子系统,复用SSH连接。
底层:TCP → SSH → SFTP,默认端口就是SSH的22端口。
作用:安全地上传、下载、管理远程服务器上的文件。
客户端:FileZilla、Xshell、WinSCP、sftp命令行。
FTP 明文;FTPS:FTP over TLS;SFTP:SSH内置文件传输,三者不一样。
二、通信模型
C/S架构
- 服务端:sshd(SSH服务)内置SFTP子系统,监听TCP 22端口;
- 客户端:先建立SSH连接、完成身份认证(密码 / 密钥);
- SSH通道建立成功后,在同一个SSH加密会话里启动SFTP子系统,执行文件操作;
只需要一次TCP连接,SSH同时提供远程命令和SFTP文件传输。
三、SFTP 核心功能
- 文件上传、下载、断点续传
- 查看目录列表、创建/删除文件夹、重命名文件
- 修改文件权限、属主、时间戳
- 支持文件断点续传
- 支持符号链接管理
四、SFTP 连接流程
- 客户端发起TCP连接,连接服务器22端口;
- SSH握手,协商加密算法,服务器下发主机密钥;
- 客户端身份认证(密码 / SSH公私钥认证);
- SSH会话建立成功,客户端请求启动sftp子系统;
- 进入SFTP交互,执行文件操作命令;
- 所有文件数据、命令、返回结果全部在SSH加密隧道内传输;
- 操作完成,关闭会话。
五、SFTP 报文特点
基于SSH的二进制报文交互,不是FTP那种明文命令。
常用操作指令(内部协议指令,不是shell命令):
- SSH_FXP_OPEN:打开文件
- SSH_FXP_READ:读取文件(下载)
- SSH_FXP_WRITE:写入文件(上传)
- SSH_FXP_READDIR:读取目录列表
- SSH_FXP_STAT:获取文件元信息(大小、权限)
- SSH_FXP_REMOVE / SSH_FXP_RMDIR:删除文件/目录
六、SFTP vs FTP vs FTPS
| 项目 | SFTP | FTP | FTPS |
|---|---|---|---|
| 底层 | SSH(TCP22) | TCP 21(控制端口)+主动/被动数据端口 | FTP+TLS,21端口 |
| 加密 | 全程加密 | 明文,账号密码裸奔 | 控制通道+数据通道TLS加密 |
| 端口 | 只用22,单一端口 | 需要额外开放数据端口 | 需要额外开放数据端口 |
| 防火墙 | 简单,只放行22 | 防火墙配置麻烦(多端口) | 防火墙配置麻烦 |
| 认证 | 密码/SSH密钥 | 账号密码 | 账号密码 |
运维推荐:优先使用SFTP,防火墙简单,安全性好。
七、优缺点
✅ 优点
- 全程加密,防窃听、防篡改;
- 复用SSH 22端口,防火墙只开放单个端口,部署简单;
- 支持密钥登录,安全性更高;
- 支持修改文件权限、属主等类Unix文件属性;
- 几乎所有Linux服务器默认自带sshd,开箱即用。
❌ 缺点
- 传输性能略低于FTP(加密带来开销);
- Windows原生对SFTP支持弱,一般需要第三方客户端;
- 不是专门文件传输协议,部分高级文件传输特性缺失。
八、重要误区澄清
- ❌ SFTP ≠ Secure FTP;SFTP全称SSH File Transfer Protocol
- ❌ SFTP不是FTP的安全版本;二者协议完全不同
- ❌ 不需要额外开启独立SFTP端口,只要sshd开启,默认就支持SFTP
九、小结
- SFTP是SSH内置的文件传输子协议,端口22,跑在SSH加密隧道上;
- 所有数据加密传输,支持密钥认证;
- 仅需单个端口,防火墙配置简单,是运维最常用的安全文件传输方案;
- 和FTP、FTPS是完全不同协议,不要混淆;
- 可以上传下载、管理目录、修改文件权限。
思考题:SFTP复用SSH 22端口,相比FTPS,防火墙配置为什么更简单?
0 条笔记