SSH大文件传输中断需分层定位:一是连接空闲超时,需配置客户端ServerAliveInterval和服务端ClientAliveInterval保活;二是网络与端口限制,检查安全组、丢包及带宽;三是协议差异,scp/sftp查日志,rz/sz调终端参数;四是资源瓶颈,包括磁盘、内存、SELinux及连接跟踪表。

SSH 传输大文件中断,不是随机问题,而是协议、配置、网络多层叠加的结果。重点不在“重试”,而在定位断点在哪一层——是连接中途断开?还是传输卡住不动?或是客户端直接报错退出?下面按排查顺序分四类讲清楚。
一、先确认是不是 SSH 连接本身在空闲时断开
很多所谓“传到一半断了”,其实是 SSH 连接被中间设备(防火墙、负载均衡、NAT网关)静默回收。大文件传输期间若长时间没数据交互,就容易触发超时。
- 检查客户端是否启用保活:打开
~/.ssh/config,确认有这三行:
Host * ServerAliveInterval 60 ServerAliveCountMax 3 TCPKeepAlive yes
意思是每60秒发一次心跳,连续3次无响应才断开(即180秒内不中断)。如果没配,大文件传输中一旦停顿稍久,就会被掐断。
- 服务端也要同步设:编辑
/etc/ssh/sshd_config,确保有:
ClientAliveInterval 60 ClientAliveCountMax 3 TCPKeepAlive yes UseDNS no
UseDNS no 很关键——避免因反向 DNS 查询慢导致会话卡顿甚至超时。
二、排除底层网络与端口限制
不是所有中断都来自 SSH 层。先验证基础链路是否稳定:
- 用
telnet 服务器IP 22或nc -zv 服务器IP 22确认端口可达; - 执行
ping -c 10 服务器IP和mtr --report 服务器IP查看是否有丢包或高延迟跳点; - 如果是云服务器(如阿里云、腾讯云),务必检查安全组——不仅服务器防火墙要放行22端口,云平台的安全组也必须显式允许入向 TCP:22;
- 大文件传输对带宽和缓冲区更敏感,可临时关闭客户端的流量控制(如 Xshell 的“启用流控”选项),避免误触发 XON/XOFF。
三、区分是 scp/sftp 还是 rz/sz 出问题
这两类工具原理完全不同,排查方向差异很大:
-
scp/sftp 中断:属于 SSH 应用层,优先查日志:
ssh -v user@host看连接建立过程;传输时加-o LogLevel=DEBUG3可输出详细协商信息;服务端日志通常在/var/log/auth.log或/var/log/secure,搜索 “timeout”、“disconnect”、“session” 关键词; -
rz/sz(Zmodem)失败:本质是串口协议跑在伪终端上,特别怕延迟和回显干扰。常见表现是进度卡在 30%–70%,终端无响应,报错如
zmodem: timeout waiting for zfin。此时应:
# 关闭本地回显和规范模式(临时生效) stty -icanon -echo # 再执行 rz -y -b
如果有效,说明是终端设置冲突;长期解决建议改用 scp 或 sftp 替代 rz/sz。
四、检查服务器资源与权限瓶颈
看似网络问题,有时只是资源不够:
- 磁盘空间:运行
df -h,确保目标路径所在分区还有足够空间(注意 inode 是否耗尽:df -i); - 内存与缓冲区:大文件传输会占用较多 socket buffer,可临时调大:
sysctl -w net.core.rmem_max=16777216(16MB); - SELinux 或 AppArmor:某些策略会拦截非标准路径写入,临时禁用测试:
setenforce 0(仅测试用); - 用户权限:确认目标目录对上传用户有写权限,且没有被
chattr +i锁定; - 防火墙模块:某些发行版默认启用
nf_conntrack连接跟踪,大文件长连接可能触发表满,查conntrack -L | wc -l,上限通常为 65536,不够可调大。


















