SFTP上传大文件卡在99%或断连,主因是客户端/服务端超时、Nginx反向代理限制、FileZilla配置不当及权限问题;需调优SSH存活参数、禁用UTF-8与FTPS、修正文件属主为www并检查磁盘空间。

为什么 SFTP 上传大文件会卡在 99% 或直接断连
宝塔默认的 SFTP 服务(OpenSSH)本身不拦截大文件,但真正拦住你的,通常是中间环节:客户端超时、SSH 服务端配置限制、或宝塔后台的 PHP/反向代理层干扰——而你根本没在传 PHP 文件,却受 PHP 配置影响。
-
ClientAliveInterval和ServerAliveInterval过短,导致空闲几秒就断连 - 宝塔面板的「网站」设置里启用了 Nginx 反向代理,但未调大
client_max_body_size,结果 SFTP 操作被误判为 HTTP 请求(尤其用浏览器插件或某些 WebSFTP 工具时) - 使用 FileZilla 等工具勾选了「强制 UTF-8」或「使用被动模式」,在内网或 Docker 环境下反而触发 NAT 映射失败
FileZilla 连接宝塔 SFTP 的关键参数设置
别信默认配置。宝塔的 SFTP 是系统级 OpenSSH,不是宝塔自己写的,所以连接方式和普通 Linux 完全一致,但路径权限和用户归属容易出错。
- 协议选
SFTP(不是 FTP 或 FTPS),端口填22 - 主机填服务器公网 IP 或内网 IP,**不要填域名**(DNS 解析失败不会报错,而是静默卡住)
- 登录类型选「正常」,用户名填你 SSH 能登进去的账号(比如
root或宝塔创建的部署用户),密码填对应密码 - 高级设置里关掉「尝试使用 FTP over TLS」和「使用 UTF-8 编码」——这两项在多数宝塔环境里会引发乱码或中断
连上后,看到的根目录是你登录用户的家目录(如 /root 或 /www/wwwroot/xxx),不是宝塔面板里的「网站根目录」视图。要传到网站目录,得手动 cd 进去,比如 /www/wwwroot/my-site。
上传后文件属主不对,网站 500 或 403 怎么办
这是最常被忽略的一环:SFTP 上传的文件默认归上传用户所有,而 Nginx/Apache 是以 www 用户运行的,没权限读取 root 写的文件。
- 上传完立刻执行:
chown -R www:www /www/wwwroot/my-site - 如果用了宝塔的「PHP 项目」或「Laravel」等特殊站点类型,还需补一句:
chmod -R 755 /www/wwwroot/my-site(注意:不要777,宝塔安全组会告警) - 若上传的是
.env或config.php类敏感文件,建议额外加chmod 640,防止被 Web 直接访问
别依赖宝塔「文件管理器」右键改权限——它底层调用的是 chown,但并发上传多个文件时,界面操作容易漏掉子目录。
比 SFTP 更稳的大文件上传替代方案
真要传 >500MB 的压缩包、数据库备份或视频素材,SFTP 不是最佳选择。OpenSSH 的加密流式传输在弱网下极易重传失败,且无法断点续传。
- 用
rsync+ SSH:支持断点、校验、压缩,命令形如rsync -avz --progress backup.zip user@ip:/www/wwwroot/site/ - 临时开个 Python HTTP 服务:
python3 -m http.server 8000,再在宝塔「远程下载」里粘贴http://your-ip:8000/backup.zip——走的是宝塔后端 wget,稳定且不占本地带宽 - 如果服务器开了宝塔「计划任务」,可把大文件先分卷(
split -b 200M bigfile.zip part_),再用 SFTP 传小块,最后在服务器用cat part_* > bigfile.zip合并
记住:SFTP 是交互式传输协议,不是为吞吐设计的。上传前先 ls -lh 看磁盘剩余空间,宝塔有些低配机器 /www 分区只有 10GB,传到一半写满,连 SSH 都登不上。

















