往网站空间传文件时,常看到FTP和SFTP两个选项。它们都能把本地文件放到服务器上,但底层完全不是一回事。FTP出现得早,1971年就有了初版,后来定为RFC 959;SFTP虽然名字里带FTP,却不是FTP的加密版,而是SSH协议的一部分,由SSH-2提供文件传输子系统。很多人把SFTP和FTPS搞混,其实FTPS才是给FTP套上SSL/TLS,而SFTP走的是另一条路。
最直观的差别在端口和连接方式。FTP默认用21端口做控制连接,传数据时再开一条数据连接:主动模式下服务器从20端口连客户端,被动模式下服务器开一个随机端口等客户端连。这个双通道设计在防火墙和NAT后面经常出问题,尤其是被动模式,空间商得预留一段端口范围,否则上传会卡在列目录或传输中。SFTP只用22端口,所有指令和数据都塞进一条SSH连接里,防火墙通常放行22就行,路由器后面的兼容性更好。要是空间商改了SSH端口,比如2222,那SFTP也跟着改。
安全上的差距更大。FTP在网络上跑的是明文,用户名、密码、文件名、文件内容都能被同一网络里的人抓包看到。早年在网吧或公共Wi-Fi用FTP,账号被截几乎不奇怪。SFTP全程加密,认证阶段和传输阶段都受SSH保护,抓包只能看到密文。FTP也能补救,用FTPS显式加密,客户端先连21端口再发AUTH TLS,或者用隐式FTPS连990端口。但不少老虚拟主机只给普通FTP,不给FTPS证书,更不给SSH,这时候要么忍,要么换空间。
认证方式也不一样。FTP基本就是用户名加密码,密码对就放行,权限靠服务器端目录配置。SFTP除了密码,还支持公钥认证:本地生成一对密钥,把公钥放到服务器,登录时用私钥验证。公钥认证不用在网络上传密码,配合强口令或密钥密码,安全性高不少。很多运维给网站空间做自动备份、自动部署,会用SFTP密钥,避免把密码写进脚本。FTP要做到类似效果,得靠FTPS加客户端证书,配置麻烦得多。
传输行为和兼容性也有区别。FTP有ASCII和二进制两种模式,ASCII模式会转换换行符,传网页文本时可能有用,但传图片、压缩包必须切二进制,否则文件损坏。SFTP不玩这套,它按二进制传,换行符转换交给本地编辑器或部署脚本处理。FTP客户端遍地都是,老式虚拟主机、路由器、打印机都认;SFTP客户端也不少,FileZilla、WinSCP、Cyberduck都支持,但服务器端得开SSH。共享主机常常只给FTP账户,不给SSH,所以你想用SFTP也用不了。反过来,如果空间商给你SSH,SFTP往往顺手就能用,还能顺便跑点命令行操作,不过SFTP协议本身只做文件管理,不执行shell命令。

速度方面,普通网站文件几百KB到几MB,FTP和SFTP体感差不多。SFTP加密有CPU开销,但现代处理器跑AES很快,瓶颈通常在网络延迟和服务器磁盘。高延迟线路下,FTP可以多开几个连接并行传,SFTP也能多开,但SSH握手比FTP重一点。传大量小文件时,两者都会慢,打包成zip再传更实际。传超大文件时,SFTP断点续传要看客户端,FTP原生支持REST续传,SFTP也有扩展支持,但工具实现参差不齐。
对网站空间上传来说,怎么选?先看空间商给什么。如果只给FTP,至少用强密码、别在公共网络裸传、能开FTPS就开、限制IP访问、定期改密码。如果给SSH,优先SFTP,尤其是涉及数据库备份、源码、配置文件。要是买的是国内虚拟主机,很多默认只有FTP,SFTP需要独立IP或VPS;国外cPanel空间常能开SSH密钥,SFTP更方便。别把SFTP和FTPS当同一个东西:FTPS还是FTP,端口和防火墙麻烦照旧;SFTP是SSH通道,端口单一,安全模型不同。搞清这点,上传网站文件时就不会被工具里的选项绕晕。