You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让iTerm2在网络中断后自动重新连接带tmux集成的SSH会话?

如何让iTerm2在网络中断后自动重新连接带tmux集成的SSH会话?

我之前也碰到过一模一样的问题——Mac睡个30秒就断网,tmux集成的SSH会话直接僵住或者断开,每次手动重连真的很打断思路。既然你没法用Eternal Terminal或者mosh(没sudo权限确实头疼),那咱们就从iTerm2本身的功能入手,给你几个靠谱的解决办法:

方法一:用iTerm2的「自动重连」+ 自定义会话命令

这是最简单的办法,直接利用iTerm2自带的重连机制,配合你的tmux启动命令:

  1. 打开iTerm2的偏好设置(可以用快捷键Cmd + ,),切换到「Profiles」标签页。
  2. 要么新建一个专门的配置文件,要么修改你当前用的配置:
    • 在「General」标签里,把「Command」选项从「Login shell」改成「Command」,然后输入你的完整tmux SSH命令:
      ssh $myhost -t "tmux -CC a -t main || tmux -CC new -A -s main"
      
      (如果$myhost是你本地的环境变量,确保iTerm能读取到;要是不确定,直接换成实际的主机地址比如user@your-server-ip更稳妥)
  3. 切换到「Session」标签页,勾选「Auto reconnect」,还可以设置「Reconnect attempts」(比如设为-1表示无限重试,或者设个你觉得合适的次数)。

这样设置之后,一旦网络断开,iTerm2会自动尝试重新执行这个命令,帮你回到之前的tmux会话里。

方法二:用iTerm2的「触发器」(Triggers)检测断开并自动重连

如果第一种方法偶尔失效,或者你想更精准地捕捉断开的提示,可以用触发器功能:

  1. 同样打开iTerm2偏好设置 → 「Profiles」→ 选中你的配置 → 切换到「Advanced」标签页。
  2. 找到「Triggers」部分,点击「Edit」添加新触发器:
    • Regular Expression:输入匹配断开提示的正则,比如:
      client_loop: send disconnect: Broken pipe|Detached
      
      这个会匹配你遇到的「Broken pipe」或者「Detached」提示
    • Action:选择「Run Command...」
    • Parameters:再次输入你的tmux SSH重连命令:
      ssh $myhost -t "tmux -CC a -t main || tmux -CC new -A -s main"
      
    • 勾选「Instant」和「Silent」,这样触发时不会弹出额外提示,直接后台执行重连。

额外小技巧:调整Mac睡眠设置减少断网概率

虽然不能彻底解决,但可以缓解频繁睡眠断网的问题:

  • 打开Mac系统偏好设置 → 「电池」→ 如果是插电状态,切换到「电源适配器」标签,把「电脑进入睡眠」的时间调长(比如1小时),同时取消勾选「如果可能,使硬盘进入睡眠」。
  • 要是用笔记本电池模式,也可以适当延长睡眠等待时间,根据自己的续航需求调整。

这些方法都是不需要服务器端权限的,完全在你的iTerm2和Mac本地设置,应该能解决你的自动重连需求。

备注:内容来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 12:34:07