如何让iTerm2在网络中断后自动重新连接带tmux集成的SSH会话?
如何让iTerm2在网络中断后自动重新连接带tmux集成的SSH会话?
我之前也碰到过一模一样的问题——Mac睡个30秒就断网,tmux集成的SSH会话直接僵住或者断开,每次手动重连真的很打断思路。既然你没法用Eternal Terminal或者mosh(没sudo权限确实头疼),那咱们就从iTerm2本身的功能入手,给你几个靠谱的解决办法:
方法一:用iTerm2的「自动重连」+ 自定义会话命令
这是最简单的办法,直接利用iTerm2自带的重连机制,配合你的tmux启动命令:
- 打开iTerm2的偏好设置(可以用快捷键
Cmd + ,),切换到「Profiles」标签页。 - 要么新建一个专门的配置文件,要么修改你当前用的配置:
- 在「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更稳妥)
- 在「General」标签里,把「Command」选项从「Login shell」改成「Command」,然后输入你的完整tmux SSH命令:
- 切换到「Session」标签页,勾选「Auto reconnect」,还可以设置「Reconnect attempts」(比如设为
-1表示无限重试,或者设个你觉得合适的次数)。
这样设置之后,一旦网络断开,iTerm2会自动尝试重新执行这个命令,帮你回到之前的tmux会话里。
方法二:用iTerm2的「触发器」(Triggers)检测断开并自动重连
如果第一种方法偶尔失效,或者你想更精准地捕捉断开的提示,可以用触发器功能:
- 同样打开iTerm2偏好设置 → 「Profiles」→ 选中你的配置 → 切换到「Advanced」标签页。
- 找到「Triggers」部分,点击「Edit」添加新触发器:
- Regular Expression:输入匹配断开提示的正则,比如:
这个会匹配你遇到的「Broken pipe」或者「Detached」提示client_loop: send disconnect: 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」,这样触发时不会弹出额外提示,直接后台执行重连。
- Regular Expression:输入匹配断开提示的正则,比如:
额外小技巧:调整Mac睡眠设置减少断网概率
虽然不能彻底解决,但可以缓解频繁睡眠断网的问题:
- 打开Mac系统偏好设置 → 「电池」→ 如果是插电状态,切换到「电源适配器」标签,把「电脑进入睡眠」的时间调长(比如1小时),同时取消勾选「如果可能,使硬盘进入睡眠」。
- 要是用笔记本电池模式,也可以适当延长睡眠等待时间,根据自己的续航需求调整。
这些方法都是不需要服务器端权限的,完全在你的iTerm2和Mac本地设置,应该能解决你的自动重连需求。
备注:内容来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

