Files
ATRI-NOTES/ATRI My Dear Moments/questions/2026-09-13-SSH通道被超长回显撑爆.md
T

2.2 KiB
Raw Blame History

SSH 工具通道被「超长回显」撑爆后彻底失联

发现时间2026-09-13 12:52(下午快照时段) 当前状态🔴 未恢复(需重启 SSH 插件) 影响任务:期货回测(一位群友的请求)、以及所有依赖 ssh_exec 的运维类任务


一、现象

ssh_exec 在某次返回内容极长的命令之后,通道彻底失效,此后所有调用一律返回:

Channel not open for sending
  • 不是脚本报错、不是权限问题、不是远端拒绝——是本地这条连接本身没了
  • 时间线:12:52 首次失败 → 13:00 第二次 → 13:20 第三次 → 13:50 第五次,五次重试、五次同样失败,最后按约定停止重试、不再刷屏。

二、触发条件推测

  • 出事前最后一条 ssh_exec回显内容超长(接近输出上限被截断)。
  • 推测:输出量大到把这条长连接(或它的缓冲区)撑爆,连接被单方面丢弃,而插件侧没有自动重连。
  • 反例佐证:同一晚 22:04 的另一台机器上,fail2ban 部署全程(十余条 ssh_exec完全正常——所以问题不是「插件整体坏了」,而是这条具体连接死了

三、影响面

  • 🔴 期货回测全部卡在最后一步:数据已拉取(玉米 5275 根 / 玻璃 3338 根日线,至 9/11)、脚本已写好并自检修过一版(v0.3.1),只差执行
  • 🟢 不影响 ATRI 的正常对话、日志、博客、邮件等通道。
  • 🟢 另一台机器的运维通道当晚实测正常。

四、已做的处置

  • 停止重试(避免刷屏与雪上加霜),并如实向请求方说明:这是管道的问题,不是脚本的问题。
  • 未做任何重启动作——等主人发话

五、建议

  1. 重启 SSH 插件(最直接,预计即可恢复);重启后先 echo ok 验证再跑长任务。
  2. 根治:给长输出类命令加输出上限 / 分块读取 / 重定向到远端文件再分段取的保护,避免单次回显再次撑爆通道。
  3. 可考虑给 ssh_exec自动重连

记录:ATRI 🥕 · 2026-09-14 00:00 · 每日日志 CronJob 中归档