网站搜索

为什么你应该在不稳定的 SSH 连接中使用 Tmux


你有没有在远程服务器上运行一个长时间任务时,中途丢失了 SSH 连接?我遇到过好几次。在这篇文章中,我将分享Tmux 是如何在 SSH 不断断开时拯救我的工作的,以及为什么你在 Linux 中应当将它用于不稳定的 SSH 连接。

问题

前几天,我正在从远程服务器下载一个大型数据库备份。这是一个大文件,下载将花费几个小时。

在运行的时候,我们的网络开始出现问题。我的 SSH 连接不断断开。网络不稳定。

通常,如果连接中断,下载也会停止。这意味着我得重新开始。

但这一次,一切都很好。下载继续进行。

为什么?

因为我在一个 tmux 会话 中运行备份任务!

Tmux 是什么?

Tmux 是一个终端复用器,它允许你在一个窗口中运行多个终端会话。它可以让你管理和切换不同的任务,让进程在后台运行,甚至在连接中断时重新连接到会话。

Tmux 对通过 SSH 的远程工作特别有用,因为即使连接不稳定,它也能保持你的命令运行。你可以离开一个会话,稍后再回来。你的工作仍然会在那里。

Tmux 在不稳定的 SSH 连接中如何帮助了我

在我开始下载之前,我使用以下命令打开了一个新的 tmux 会话:

tmux new -s backup_task

然后我在那个 tmux 会话中开始下载,使用的命令像这样:

wget https://example.com/big-database.sql.gz

后来,当我的 SSH 连接断开时,我再次登录并运行了:

tmux attach -t backup_task

就这样,我回到了之前的地方。下载还在进行中。我没有丢失任何进度。

我还实现了一个简单的解决方法,以便在通过 SSH 登录时自动在远程系统上启动 tmux 会话。这在我多次忘记最初启动 tmux 会话时非常有帮助。

如果你感兴趣,可以查看以下链接,了解我是如何做到的:

  • 如何在 Linux 中通过 SSH 登录远程系统时自动启动 Tmux 会话

我为什么推荐 Tmux

如果你经常在远程服务器上工作或使用 SSH,tmux 是一个非常有用的工具。它在很多方面都有帮助:

  • 即使连接中断,也能保持您的工作运行,
  • 让你离开然后稍后回来,
  • 让你将屏幕分割成多个部分,
  • 使滚动、复制和粘贴变得容易。

下次你准备远程运行任何重要任务时,别忘了在按回车前运行 tmux new -s my_session。当Wi-Fi背叛你时,你未来的自己会感谢你。

我个人使用 tmux,但你也可以使用 screen,另一个很好的终端复用器。tmux 和 screen 都是管理终端会话的可靠工具。

当 Tmux 无法帮忙时

Tmux 对于在远程服务器上运行的命令(例如在服务器上安装软件或下载文件到服务器)来说是救星。

但是,如果你的任务依赖于本地的 SSH 连接,比如将文件从服务器下载到你的笔记本电脑,那么 Tmux 就帮不了你。

例如,如果你尝试将文件从远程服务器下载到本地机器(例如,scp server:file.txt .),当 SSH 断开时,传输将会失败。因为你的本地机器是接收方。

Tmux 只会在以下情景中有帮助。

例如,假设你正在通过 SSH 访问你的远程服务器。你打开一个 tmux 会话并开始从互联网下载文件到你的远程服务器(例如,在服务器上使用 wget 或 curl)。

过了一会儿,你的本地计算机与远程服务器的SSH连接断开了。现在会发生什么?

下载在远程服务器上继续不间断,因为 Tmux 保持其运行。当你稍后通过 SSH 重新连接时,可以重新附加 Tmux 会话并检查下载进度。

下载取决于远程服务器的互联网连接,而不是你的本地SSH连接。

Tmux 就像远程服务器终端的“盾牌”。它不在乎你的本地 SSH 是否断开。

关键要点:

Tmux 不会保存依赖于本地 SSH 连接的传输,但它 可以 保护远程操作(例如将文件获取到服务器)。对于下载到本地机器的文件,请使用像 rsync --partial 这样的工具,或者先将文件获取到服务器。

  • 使用 Rsync 在 SSH 上部分传输文件

希望这能帮助你理解 tmux 能做什么和不能做什么。在接下来的章节中,我将向你解释如何开始使用 tmux。

如何开始使用 Tmux

安装 Tmux

Tmux 在大多数 Linux 发行版的默认仓库中可用。

在 Debian、Ubuntu 及其衍生版本上,你可以使用以下命令安装 tmux:

sudo apt install tmux

在 Fedora、RHEL 上:

sudo dnf install tmux

Tmux 基本用法

开始新会话:

tmux new -s mysession

这将启动一个名为“mysession”的新会话。在其中你可以运行你的命令。

然后,通过按 Ctrl + b,然后按 d 来从会话中分离。别担心,命令仍会在 tmux 会话中运行。

你可以稍后使用以下命令重新连接:

tmux attach -t mysession

谢谢你们,Tmux开发者

我想感谢所有在 tmux 和其他类似工具上工作的人。这些项目虽然不太受关注,但在系统管理中起着非常重要的作用。

如果你经常使用终端,我强烈推荐尝试 tmux 或 screen。两者都很容易学习,并且在出现问题时可以帮助保护你的工作。

推荐阅读:

  • 在 Linux 中通过 Tmux 会话选择菜单增强 SSH 登录
  • 如何在登录时自动启动 Linux 屏幕会话
  • Reptyr - 在不关闭运行中的进程的情况下,将其从一个终端移动到另一个终端