FTP默认端口是21,SFTP默认端口是22,两者在传输安全性和协议原理上完全不同,日常使用中端口混淆是连接失败的常见原因。
FTP端口21与SFTP端口22:默认配置与核心区别
很多新手以为FTP和SFTP只是加了个“S”的区别,实则它们走的端口和协议体系完全不同,FTP(File Transfer Protocol)使用端口21作为控制端口,数据传输时还会另开动态端口(通常为随机高位端口或配置的被动端口范围),而SFTP(SSH File Transfer Protocol)本质上是SSH协议的一部分,默认复用SSH端口22,无需额外开放数据端口。
默认端口为何是21和22?
FTP的历史可以追溯到互联网早期,端口21被IANA(互联网号码分配局)分配为FTP控制端口,这一标准沿用至今,几乎所有的FTP服务器都默认监听21,SFTP则完全依赖SSH隧道,SSH的默认端口22由IETF指定,SFTP作为其子系统,自然继承了这个端口,行业共识认为,这种设计让SFTP在防火墙策略上更简单只需开放一个端口即可同时完成认证、加密和文件传输。
端口背后的安全差异
FTP的端口21用于发送指令(如USER、PASS),但数据通道(端口20或动态端口)默认不加密,密码和文件内容均以明文传输,即便使用FTPS(FTP over SSL),控制端口仍为21,数据端口则需要额外配置,而SFTP通过端口22建立加密通道,所有操作都在这个单端口内完成,避免了被动端口范围难以管理的麻烦,业内专家指出,国内政务云和金融行业近年已明确要求禁止开放21端口用于文件传输,转而强制使用22端口或更高配置的加密方案。
端口混淆的典型场景
- 用户用FTP客户端(如FileZilla)连接服务器,却填写了端口22,导致连接被拒绝因为FTP服务端并未监听22。
- 用SFTP客户端(如WinSCP)连接21端口,同样会失败,因为21端口上运行的是FTP控制协议,无法建立SSH握手。
- 部分云服务器默认安全组只开放了22端口,若用户想用FTP,还需额外手动放行21端口的TCP入站规则,否则连接超时。
如何修改FTP和SFTP的默认端口号
实际运维中,管理员常因安全扫描或端口冲突需要修改默认端口,修改FTP端口和修改SFTP端口的方法完全不同,下面分别拆解。
修改FTP默认端口21的步骤
以Linux下的vsftpd为例,修改端口需要编辑配置文件并重启服务。
- 查找并编辑vsftpd配置文件:
sudo vi /etc/vsftpd/vsftpd.conf - 修改或添加一行:
listen_port=2121(将21改为你想要的端口,如2121) - 如果使用被动模式,还需调整被动端口范围:
pasv_min_port=30000和pasv_max_port=31000 - 重启vsftpd服务:
sudo systemctl restart vsftpd - 在防火墙或云安全组中放行新端口(如2121),同时记得放行被动端口范围。
注意: 部分FTP客户端在连接非标准端口时,需要在地址栏手动指定端口(如 ftp://example.com:2121),否则默认还是用21。
修改SFTP默认端口22的方法
SFTP不单独监听端口,它依赖SSH服务,因此修改SFTP端口就是修改SSH端口。
- 编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config - 找到
#Port 22,去掉注释并改为新端口,Port 2222 - 如果想同时保留旧端口,可以添加多行:
Port 22和Port 2222,这样两个端口都可用 - 重启SSH服务:
sudo systemctl restart sshd - 在防火墙中放行新端口(如2222),并确保原有22端口已关闭(如果不再需要的话)
关键点: 修改SSH端口后,务必保持当前会话不断开,用另一个终端测试新端口连通性,再退出当前会话,否则可能把自己锁在服务器外,建议先在安全组中临时放行两个端口,测试无误后移除旧端口。
修改端口后的客户端配置
无论是FTP还是SFTP,修改端口后客户端都需要同步更新,以FileZilla为例,连接FTP时在“主机”栏填写 ftp://服务器IP:2121,或者直接输入 IP:2121,连接SFTP时,在“协议”选择SFTP,主机栏填写 sftp://IP:2222,多数图形化客户端都有单独的端口输入框,注意不要混淆“主机”和“端口”两项。
连接FTP/SFTP时端口配置常见问题与解决
端口配置错误是文件传输失败的头号原因,以下梳理几个高频问题,涵盖百度搜索中常见的“ftp端口21连不上”和“sftp端口22连接失败”等场景。
为何FTP端口21连接成功却无法列出目录?
很多用户反馈FTP能登录,但一刷新目录就卡死或报错“读取目录列表失败”,这通常不是端口21本身的问题,而是被动模式端口未放行,FTP控制通道用21,数据通道默认走随机高位端口(如1024-65535),如果服务器防火墙或云安全组只开放了21,数据通道被阻断,目录列表自然无法获取。
解决思路:
- 在FTP服务端(如vsftpd)中固定被动端口范围,
pasv_min_port=30000和pasv_max_port=31000 - 在防火墙中放行这个范围的所有TCP端口,或者将客户端设置为主动模式(但主动模式要求客户端有公网IP且开放20端口,多数家庭网络不适用)
修改SFTP端口后SSH密钥认证失效?
修改SSH端口本身不影响密钥认证,但如果你修改了sshd_config中的Port后,没有重启SSH服务,或者重启后防火墙仍未放行新端口,即使密钥正确也会被拒绝,常见错误是修改了配置但忘记重启,或者重启后新端口未被监听(用 sudo netstat -tlnp | grep ssh 能快速查看)。
端口冲突导致服务无法启动
如果新选的端口(如FTP用2121,SFTP用2222)已经被其他程序占用,服务会启动失败,用 sudo lsof -i :2121 可以检查端口占用情况,选择端口时建议避开常见服务端口,如8080、3306等,优先使用49152-65535范围内的私有端口。
不同场景下FTP与SFTP端口的选择建议
内部局域网文件共享
如果是公司内部NAS,且所有设备都在同一个可信网络内,使用FTP端口21加被动模式即可,速度快且配置简单,SFTP的加密开销在局域网内显得多余,反而可能拖慢传输速度,但需注意,即使在内网,如果涉及敏感数据(如财务报表),仍建议走SFTP端口22加密。
国内云服务器环境
国内主流云厂商(简米云、酷番云、华为云)默认安全组策略通常只开放22端口,如果你需要搭建FTP服务器,必须手动放行21端口以及被动端口范围,许多用户反映“简米云服务器ftp端口21配置后依然连不上”,原因往往是只放行了21,忽略了被动端口,建议直接在云控制台配置“FTP”模板,或一次性放行一个完整端口段(如30000-31000)。
跨国传输与CDN节点
跨国传输场景下,SFTP端口22的加密握手会引入额外延迟,但安全性远高于FTP,如果传输非敏感大文件,可以考虑使用FTP配合端口21,并限制IP白名单,不少CDN服务商提供的源站回源协议支持FTP和SFTP,此时端口选择应与源站配置一致,避免因端口不通导致回源失败。
物联网设备与嵌入式系统
很多低功耗物联网设备(如工业采集器)只支持FTP协议,端口21固定无法修改,在这种情况下,建议将设备放入独立VLAN,通过防火墙限制仅允许特定IP访问21端口,同时启用FTPS(端口990)作为替代方案。
FTP SFTP端口常见问题解答
Q:FTP和SFTP除了端口不同,还有什么核心区别?
FTP使用端口21(控制)和动态端口(数据),数据明文传输;SFTP使用端口22,所有数据通过SSH加密,FTP需要额外的安全层(如SSL/TLS)才能保障隐私,而SFTP天然具备加密、认证和完整性校验,FTP支持主动和被动两种模式,SFTP只有一种连接方式,配置更简单。
Q:如何确认服务器上哪个端口在提供FTP或SFTP服务?
在Linux服务器上,使用命令 sudo netstat -tlnp | grep -E "21|22" 可以看到监听端口对应的进程,如果输出显示 vsftpd 监听21,或 sshd 监听22,则说明对应服务正在运行,若想确认某个端口是否被占用,可以用 nc -zv 127.0.0.1 21 测试本地连通性。
Q:修改FTP端口后,原有客户端是否需要重新配置?
是的,所有客户端连接地址中的端口号必须同步更新,如果使用默认端口21,客户端通常可以省略端口;但一旦改为自定义端口,必须在主机地址后显式添加端口,ftp://example.com:2121,SFTP同理,修改SSH端口后,客户端连接时必须指定新端口,否则仍会尝试连接22,导致失败。
FTP端口21与SFTP端口22的选择,本质是安全性与便捷性的权衡,对于大多数面向公网的传输场景,坚持使用SFTP端口22并搭配密钥认证,是当前行业公认的最佳实践。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/539281.html



