使用 iTerm2 和 tmux 集成自动重新连接到 SSH

使用 iTerm2 和 tmux 集成自动重新连接到 SSH

我正在使用 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 会话。

相关内容