0

0

sftp 连接频繁断开或慢的 ClientAliveInterval 与 MTU 调整

舞姬之光

舞姬之光

发布时间:2026-01-23 18:41:02

|

289人浏览过

|

来源于php中文网

原创

ClientAliveInterval 单独使用无法解决 SFTP 断连,因其不能应对网络丢包或中间设备清空空闲连接;必须配合 ClientAliveCountMax 2,并启用客户端 ServerAliveInterval 才有效。

sftp 连接频繁断开或慢的 clientaliveinterval 与 mtu 调整

为什么 ClientAliveInterval 不能单独解决 SFTP 断连问题

单纯增大 ClientAliveInterval(比如设成 600)只让 SSH 服务端更“耐心”,但无法应对底层网络丢包、重传或中间设备(如 NAT 网关、防火墙)主动踢掉空闲连接的问题。很多企业出口网关默认 300 秒清理无数据流的 TCP 连接,此时即使服务端还在发保活包,客户端收不到 ACK,连接仍会卡死或超时断开。

实操建议:

  • ClientAliveInterval 必须配合 ClientAliveCountMax 2 使用,避免单次丢包就断连
  • 客户端侧也应启用 ServerAliveInterval(OpenSSH 客户端参数),比服务端保活更可控
  • 若用 sftp 命令行工具,推荐加 -o ServerAliveInterval=30 -o ServerAliveCountMax=3
  • 注意:ClientAliveInterval 是服务端配置,写在 /etc/ssh/sshd_config,改完需 sudo systemctl reload sshd

MTU 过大导致 SFTP 慢或卡顿的真实表现

当路径 MTU 小于本地接口 MTU(如本地设 1500,中间某段只有 1400),TCP 分片失败或 ICMP “Fragmentation Needed” 包被拦截时,SFTP 上传/下载会明显变慢、卡在某个百分比、甚至 hang 住数分钟才报错 Connection timed outBroken pipe。这不是带宽问题,而是 TCP 重传和黑窗口效应造成的。

判断与调整方法:

  • 先用 ping -M do -s 1472 example.com 测试路径 MTU(1472 + 28 字节 IP/ICMP 头 = 1500);逐步减小 -s 值直到不丢包,得到实际 MTU
  • 若发现路径 MTU ≤ 1400,可在客户端 SSH 配置中限制 TCP MSS:sudo ip route change default via 192.168.1.1 dev eth0 advmss 1360(根据实测 MTU 减去 40 字节 TCP/IP 头)
  • 更稳妥方式是改 SSH 的 TCPKeepAlive no + 启用 ServerAliveInterval,避免 KeepAlive 触发路径 MTU 探测失败

Linux 客户端自动适配 MTU 的临时方案

不用改系统路由,也能让单个 SSH 连接绕过 MTU 问题:通过 ProxyCommandStreamLocalBindUnlink yes 不起作用,真正有效的是强制分片控制。

通义千问
通义千问

阿里巴巴推出的全能AI助手

下载

推荐做法:

  • ~/.ssh/config 中为对应主机添加:
    Host sftp.example.com
        HostName sftp.example.com
        ServerAliveInterval 45
        ServerAliveCountMax 2
        TCPKeepAlive no
        IPQoS lowdelay
  • 如果仍卡顿,追加 UseRoaming no(禁用 OpenSSH 5.4+ 的 Roaming 功能,某些代理环境会因此阻塞)
  • 不要依赖 mtu-discnet.ipv4.ip_no_pmtu_disc=1 全局关闭 PMTU 发现——这会让所有 TCP 连接退化到 536 字节最小 MTU,反而更慢

SFTP 协议层与 SSH 传输层的性能错位

SFTP 是运行在 SSH 之上的子系统,它的“慢”往往不是协议本身问题,而是 SSH 层的加密协商、密钥交换或重传放大了底层网络缺陷。例如,AES-GCM 加密在老 CPU 上吞吐受限,而 ChaCha20-Poly1305 在 ARM 设备上更快;又或者服务器启用了 UsePrivilegeSeparation sandbox,每次 SFTP 文件操作都触发 seccomp 检查,造成延迟毛刺。

排查要点:

  • ssh -vvv user@host 观察连接阶段耗时,重点看 debug1: kex: algorithm:debug1: Authentication succeeded 之间是否超 2 秒
  • 服务端检查 sshd -T | grep -E "(KexAlgorithms|Ciphers)",避免使用 diffie-hellman-group1-sha1 等已淘汰且慢的算法
  • 若用 OpenSSH 8.9+,确认未启用 PermitTunnel yesAllowAgentForwarding yes——这些会增加每次 SFTP 请求的权限检查开销
MTU 和保活参数都是“调出来”的,不是设完就一劳永逸;真实环境里常有多个中间节点各自截断不同大小的包,最稳的方式是客户端主动降 MTU + 服务端保活兜底 + 关键算法精简。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1051

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

107

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

625

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.12.07

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

404

2023.08.14

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1352

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

704

2023.06.29

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.7万人学习

Git 教程
Git 教程

共21课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号