凌晨两点半,一位运维同事在群里发截图:跑了四十多分钟的数据库导入停在半路,终端窗口里只剩一行提示,光标还在闪,但敲什么命令都没有回音。他以为程序崩了,重启了一遍,白等四十分钟。真正的原因简单得让人无语——网络抖了一下,会话早断了,界面却没变。这类事故我们前后复盘了三起,都指向同一个动作:Finalshell怎么设置自动重连,以及设置之后到底能救回什么、救不回什么。
案例一:长任务跑到一半,窗口还在但命令没反应
第一起事故发生在跨地域的一台测试机上。现象是界面完好、光标可动,输入回车毫无反应。判断方式其实很快:看窗口右下角或连接状态指示,如果已显示断开,那就是纯粹的断线;如果显示正常但无响应,多半是链路已经黑洞化,客户端还没察觉。
处理方法分两步走:
- 在会话属性里找到连接相关设置,勾选自动重连,并把重连次数设为 3 到 5 次、间隔设为 5 到 10 秒,避免无意义的长时间空转。
- 同时打开保持连接(心跳)选项,间隔一般取 30 到 60 秒,让中间的网络设备别把这个安静的长连接当成空闲连接回收掉。
需要提前说清楚一件事:自动重连恢复的是连接,不是任务。断线期间在远端跑的命令,重连后可能还在跑,也可能已被系统终止,取决于进程是否与终端会话绑定。长任务请一律交给 nohup、screen 或 tmux,重连之后接回去看日志,这才是稳妥做法。
案例二:跳板机十分钟不动就被踢
第二起发生在一位刚入职的同事身上。他习惯打开会话后先去翻文档,回来发现连接已经掉了。这类“静默超时”通常有两个源头:一是本地客户端的保活没开,二是服务器端的 SSH 空闲超时设置偏短。
实操建议是按下面的顺序排查,不要一上来就改客户端:
- 先确认会话是否启用了保持连接,间隔是否大于服务器的空闲超时阈值。
- 再看服务器端 sshd 配置里的客户端存活检测参数,如果阈值只有几分钟,把客户端心跳压到它的一半左右更稳。
- 最后确认办公网或云厂商的负载均衡是否有连接空闲回收,这一层客户端改不了,只能靠心跳维持。
这位同事把心跳设成 30 秒后,问题基本消失。代价是每天多一点流量,可以忽略。
案例三:切换 Wi-Fi 后,重连成功了但上下文全乱
第三起最有迷惑性。同事从会议室回到工位,笔记本换了网络,客户端提示已重连,他直接敲下一条命令,结果提示目录不存在——因为重连后落在家目录,之前的路径、环境变量、虚拟环境全没了。
这里的经验是:自动重连负责把管道接上,不负责还原现场。所以要么在重连后养成先确认当前路径与用户身份的习惯,要么干脆用会话复用工具,让工作现场留在远端。
把设置做扎实的四步
- 第一步,挑一个最常用的会话做样板,在会话属性中打开自动重连并设定次数与间隔。
- 第二步,打开保持连接,间隔取 30 秒上下,注意不要小于服务器端的检测频率。
- 第三步,测试一次真实断线:拔网线或切网络,观察客户端提示、重连耗时、重连后的落点目录。
- 第四步,把样板会话复制到同组其他机器,或直接改分组默认属性,避免逐台手点。不同版本的菜单名称可能略有差异,找不到时优先在会话属性与全局选项中翻。
五个容易踩的坑
- 只开自动重连、不开心跳。断得频繁,重连再快也是治标。
- 重连次数设成无限次。链路彻底不通时会一直卡在重连状态,反而看不出问题。
- 以为重连成功就等于任务未中断。前面三起事故里有两起栽在这个误解上。
- 忽略服务器端限制。客户端设得再勤,sshd 或安全策略照样会踢人。
- 密集重连触发防护机制。连续快速重连可能被当成异常登录,触发封禁,间隔别设得太短。
收尾:写进值班清单
我们现在把这件事固化成三条:所有长期会话必须开心跳;跑超过十分钟的任务必须挂会话复用工具;交接班时确认自动重连状态。配置本身只花两分钟,省下的却是凌晨三点的那四十分钟。如果你也遇到过“窗口还在、命令不回”的场面,先去会话属性里把这两个开关看一遍,多半就能对上号。