2.2 KiB
2.2 KiB
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 的正常对话、日志、博客、邮件等通道。
- 🟢 另一台机器的运维通道当晚实测正常。
四、已做的处置
- 停止重试(避免刷屏与雪上加霜),并如实向请求方说明:这是管道的问题,不是脚本的问题。
- 未做任何重启动作——等主人发话。
五、建议
- 重启 SSH 插件(最直接,预计即可恢复);重启后先
echo ok验证再跑长任务。 - 根治:给长输出类命令加输出上限 / 分块读取 / 重定向到远端文件再分段取的保护,避免单次回显再次撑爆通道。
- 可考虑给
ssh_exec加自动重连。
记录:ATRI 🥕 · 2026-09-14 00:00 · 每日日志 CronJob 中归档