使用 Tmux 防止远程SSH丢失

背景

一般外网链接家庭电脑使用的是跳板机,使用的命令如下 ssh -J ubuntu@xx.xyz zbc@127.0.0.1 -p 8888 ,但是运行超过一定时间如3小时,会有自动断开问题。

这是一个非常常见的问题,通常是因为网络中间设备(如路由器、防火墙)在连接空闲一段时间后(没有任何数据传输)切断了连接。

解决方案

方案一:使用 Tmux(推荐,彻底防止工作丢失)

Tmux 可以解决这个问题吗? 可以。 Tmux 不会阻止 SSH 断开,但它能保证即使 SSH 断开了,你在服务器上运行的程序、编辑器、终端窗口都不会关闭。 当你重新通过 SSH 连接上去后,只需一条命令就能瞬间找回之前的所有工作状态。

操作步骤:

  1. 安装 Tmux (在你的远程目标机器上,即你登录进去后的那台机器):

    sudo apt update
    sudo apt install tmux
    
  2. 使用 Tmux

    • 登录远程服务器后,输入 tmux 进入 Tmux 会话。
    • 在里面正常工作(跑代码、编辑文件)。
    • 如果 SSH 断开了(出现 Broken pipe):
      1. 重新执行 SSH 命令登录。
      2. 输入 tmux attach
      3. 你会发现刚才的界面、光标位置、运行的程序全都原封不动地回来了!

方案二:优化 SSH 配置(防止自动断开)

除了用 Tmux 保护现场,你还可以通过发送“心跳包”来告诉服务器和中间路由“我还在线”,从而防止 Broken pipe 错误。

方法 A:命令行参数(临时生效)

在你的 SSH 命令中加入 -o ServerAliveInterval=60。这意味着客户端每 60 秒会向服务器发送一个空包,保持连接活跃。

ssh -o ServerAliveInterval=60 -J ubuntu@tx2.898311.xyz zbc@127.0.0.1 -p 6033

方法 B:修改配置文件(永久生效,推荐)

在你的本地电脑(发起 SSH 的那台 Ubuntu)上,编辑或创建 ~/.ssh/config 文件:

  1. 打开文件:

    nano ~/.ssh/config
  2. 加入以下内容(针对所有主机生效,或者你可以只针对特定 Host):

    Host *
        ServerAliveInterval 60
        ServerAliveCountMax 3
    • ServerAliveInterval 60:每 60 秒发送一次心跳。
    • ServerAliveCountMax 3:如果发了 3 次心跳服务器都没回,才判定为断开。

总结建议

最稳健的做法是 双管齐下

  1. 配置 ~/.ssh/config 加上心跳设置,尽量减少断连发生的概率。
  2. 养成在远程服务器使用 tmux 的习惯,这样万一网络真断了(比如家里宽带抖动),你的代码和运行任务也不会丢。

是否想了解更多关于 Tmux 的快捷键(如分屏、多窗口)的使用技巧?

Tmux 的快捷键(如分屏、多窗口)的使用技巧

这是一个非常好的习惯!一旦你习惯了 Tmux,它会彻底改变你的终端工作流。

Tmux 的核心逻辑是:前缀键 (Prefix) + 命令键。 默认的前缀键是 Ctrl + b。这意味着你必须先按下 Ctrlb松开后,再迅速按下一个命令键。

以下是 Tmux 最常用、最实用的快捷键清单,专为提升效率整理:

1. 核心概念:分屏(Panes)

这是你提到的最想要的功能,可以在一个屏幕里同时看代码、监控日志和跑命令。

功能快捷键操作记忆技巧
左右分屏Ctrl+b 然后按 %键盘上的 % 看起来就像左右分开
上下分屏Ctrl+b 然后按 "键盘上的 " 位于中间,寓意上下分
切换光标Ctrl+b 然后按 方向键上下左右切换焦点
关闭当前分屏Ctrl+b 然后按 x会提示确认,按 y 确认
最大化/恢复Ctrl+b 然后按 zZoom。想专心看某个分屏时非常有用!
调整分屏大小Ctrl+b 然后按住 Ctrl+方向键(部分版本适用) 或按 : 输入 resize-pane

2. 多窗口管理(Windows)

类似于浏览器的“标签页”,当一个屏幕塞不下太多分屏时使用。

功能快捷键操作记忆技巧
新建窗口Ctrl+b 然后按 cCreate new window
切换窗口Ctrl+b 然后按 数字键0 是第一个,1 是第二个…
下一个窗口Ctrl+b 然后按 nNext
上一个窗口Ctrl+b 然后按 pPrevious
重命名窗口Ctrl+b 然后按 ,方便你标记这个窗口是干嘛的 (如 “server”, “logs”)

3. 会话管理(Sessions)

这是解决“断线重连”的关键。

  • 挂起(Detach): Ctrl+b 然后按 d
    • 这会让你回到原本的 SSH 命令行,但 Tmux 里的东西还在后台跑。
  • 查看列表: 在终端输入 tmux ls
  • 恢复(Attach):
    • tmux attach (恢复最近的一个)
    • tmux attach -t 0 (恢复编号为 0 的会话)

4. 滚动查看历史 (Copy Mode)

新手最容易遇到的问题:“为什么我用鼠标滚轮滚不上去?” 因为 Tmux 默认接管了屏幕。

  • 进入滚动模式: Ctrl+b 然后按 [
    • 现在你可以用键盘的 PageUp/PageDown 或方向键查看之前的输出。
  • 退出滚动模式: 按 q

💡 进阶:开启“鼠标模式” (强烈推荐)

对于 24.04 这种较新的系统,开启鼠标支持会让体验像现代终端一样丝滑。你可以直接用鼠标点击来切换分屏,或者用滚轮翻页。

如何开启:

  1. 在服务器上创建或编辑配置文件:

    nano ~/.tmux.conf
    
  2. 加入这一行:

    set -g mouse on
    
  3. 保存退出 (Ctrl+O, Enter, Ctrl+X)。

  4. 如果是已启动的 Tmux,按 Ctrl+b 然后输入 :source ~/.tmux.conf 生效,或者直接重启 Tmux。

现在,你可以直接用鼠标点击某个分屏来激活它,或者拖拽分屏边缘来调整大小了!