我正在使用 iTerm 的 tmux 集成通过 tmux SSH 连接到远程服务器,如下所示:
ssh $myhost -t "tmux -CC a -t main || tmux -CC new -A -s main"
但是,当我离开 Mac 30 秒后,它就会进入睡眠状态,并且互联网连接会中断。这会导致我的所有标签被冻结,有时甚至断开连接。
** tmux mode started **
Command Menu
----------------------------
esc Detach cleanly.
X Force-quit tmux mode.
L Toggle logging.
C Run tmux command.
Unrecognized command from tmux. Did your ssh session die? The command was:
client_loop: send disconnect: Broken pipe
Detached
如果卡住了,我必须按 shift-X 强制退出 tmux 模式。无论如何,我都必须手动重新运行,ssh $myhost -t "tmux -CC a -t main || tmux -CC new -A -s main"
这会花几秒钟的时间,并影响我当天的工作效率。
有没有办法让 iTerm 在网络断线时自动重新连接?
请注意:使用 Eternal Terminal 不是一个选项,因为我没有远程服务器上的 sudo 访问权限。使用 mosh 也不行。
答案1
以下是我发现的内容:
安装 autossh 并像这样使用它:
autossh -M 0 mymachine -A -t tmux attach-session
您的 ssh 配置中可能mymachine
包含某些内容。另一种方法是user@ip
tmux 部分假设您在该机器上打开了一个会话,如果没有,您只需提供一个名称即可。-A 只是一个直通选项,用于让您的 ssh 代理签署内容,例如从远程服务器提取 git。我也不必担心 iTerm tmux 集成,因为我现在可以只拥有一个始终包含远程 tmux 屏幕的选项卡。
我发现通过这样做我只需要写一次命令,并且每次打开终端时(例如,在我睡觉后打开机器后),我都会重新登录到我的所有远程 tmux 会话。