如何在断开连接后保持远程 SSH 会话运行

SSH(Secure Shell)是端到端的加密网络系统,允许用户从客户端远程访问服务器或系统。 由于其非对称加密安全系统,即使从不安全的客户端网络访问服务器也非常安全。 但有时由于不活动或网络信号不佳, SSH 远程访问可能会断开连接。 不管是什么原因,作为 Linux 管理员,在断开连接后保持 SSH 会话和进程运行是一项至关重要的工作。

SSH 会话断开连接的原因

简而言之,SSH隧道代理错误,网络超时,使用错误的网络端口,甚至没有以身份登录到您的系统 根用户 还可以让您与 SSH 远程管理断开连接。 在这篇文章中,我们将讨论关于 SSH 的最常见问题; 断开连接后如何保持 SSH 会话和进程运行。

1. 使用 screen 命令

screen command 是 SSH 管理中最常用和最有用的命令。 这 screen 命令可以解决 IPv4 和 IPv6 地址的主机名问题。 有了根功能, screen 命令可以注销或关闭从客户端到服务器端的会话。 如果您是 Linux SSH 的新手,这里有一些 CLI 可以帮助您安装和查找 screen 命令。

对于 Ubuntu:

$ sudo apt install screen

对于 OpenSUSE:

$ sudo zypper install screen

– –

对于 Arch Linux:

$ sudo pacman -S screen

对于红帽企业 Linux:

$ sudo yum install screen

完成安装后,开始监视系统启动屏幕。

$ screen
$ screen --help

获得访问权限后,通过 SSH 连接到服务器,您就想获得远程访问权限。 如果您计划在您的工作站上进行长时间的夜间工作,但又不想让您的 SSH 客户端停机,您可以使用 screen 命令。 这可以分离您的屏幕会话,但不用担心,您启动的任务将完成。

分离你的屏幕新闻 Ctrl-A 进而 Ctrl-D 从你的键盘。 您可以随时从终端登录以监控工作进度。 要使用会话重新连接或连接现有会话,请使用以下 CLI。

$ screen -r
screen -D -r

2. 使用 tmux 工具

多路复用器 或终端多路复用器是程序员和系统管理员非常流行且有用的工具,它允许用户在同一终端中的程序之间切换。 为了让 SSH 会话在后台运行, tmux 可以是一个非常快速的解决方案。 它可以分离和重新附加进程在后台运行的应用程序。 下面是安装说明 tmux 适用于 Linux 发行版。

对于 Arch Linux:

$ sudo pacman -S tmux

对于红帽企业 Linux:

$ sudo yum install tmux

对于 Ubuntu:

$ sudo apt-get install tmux

对于 OpenSUSE:

$ sudo zypper install tmux

安装后 tmux开始 tmux session 使用终端命令。 安装不会花费太多时间。 完成安装后,您现在可以开始使用 tmux. 开始 tmux,只需在终端中输入 tmux。

$ tmux

如果您需要运行多个终端多路复用器以保持所有 SSH 会话在后台运行,在这种情况下,您可能会发现在它们之间切换时会遇到困难 tmuxtmux. 以下是从一种形式切换到另一种形式的命令行。

$ tmux detach
$ tmux attach
$ tmux attach -t 2

检查所有 tmux 屏幕使用 tmux list 命令。

$ tmux ls

3. 使用 byobu 工具

屏风 该工具主要用于 Linux 上的远程 SSH 管理和屏幕监控。 它是一个开源软件,可以与 tmux 或者 screen 工具。 您可以通过以下方式查看当前状态、通知和消息 byobu 工具。 虽然 byobu Ubuntu 默认安装。 但如果没有,您可以将其安装在您的 Linux 机器中。 检查是否 byobu 通过检查其他版本的 byobu 是否安装在您的系统中。

$ byobu --version

然后启用 byobu,这将有助于在断开连接后保持 SSH 会话在后台运行。

$ byobu-enable

byobu ssh 运行后断开linux

这里使用 CLI 解释安装过程。

对于 Ubuntu:

$ sudo apt install byobu

对于 OpenSUSE:

$ sudo zypper addrepo https://download.opensuse.org/repositories/utilities/openSUSE_Leap_42.3/utilities.repo
$ sudo zypper refresh
$ sudo zypper install byobu

对于 Arch Linux:

$ yaourt -S byobu
$ packer -S byobu

对于红帽企业 Linux:

$ sudo yum install byobu

为了 Fedora:

$ sudo dnf install byobu

开始使用 byobu,只需在终端中输入 byobu 并点击 Enter.

$ byobu

现在,如果您使用 tmux 或者 screen,您可以在其中任何一个之间进行选择以进行后端协作。

$ byobu-select-backend

现在,您可以在断开连接后管理和保持您的 SSH 会话在后台运行,使用系统键盘功能键。 要与 byobu 一起使用 SSH,请按 CTRL+SHIFT+F2 从键盘启用 SSH 环境。 要向前和向后移动 SSH 会话,您可以使用 ALT+UPALT+DOWN.

要断开 SSH 会话,请按 F6 从键盘。 现在,如果您正在寻找分离但不断开会话,那么就可以了。 要分离 SSH 会话并仍保持连接,请按 SHIFT+F6. 这是为您提供的另一个额外的键盘命令。 仅保持当前屏幕会话处于活动状态,并且 close 所有其他窗口按 ALT+F6.

4. 使用 nohup 命令

nohup 或“no hangup”命令是屏幕或 tmux 的一个非常有用的替代工具。 它还允许用户在断开连接后保持 SSH 会话运行。 这 nohup 命令告诉系统通过避免在后台运行所有进程 信号挂断(SIGHUP)。

检查 nohup 手册和选项构成您的 Linux 终端,在终端中键入以下命令并点击 Enter.

$ nohup options

要检查当前活动的作业列表,请使用 -l 从您的终端命令。

$ jobs -l

现在,对于 SSH 连接,为避免连接丢失并在断开连接后保持会话运行,请使用作业后面的 nohup 命令行。 您还可以使用 cat 命令和 nohup 命令在文本文件中获取作业的输出列表。

$ nohup ./hello.sh
$ cat nohup.out

要在后台运行进程,您可以使用 & 符号之后 nohup 命令。 就像,如果我想在后台测试 wordpress-408970-1286763.cloudwaysapps.com 的 ping,命令行将类似于下面的行。 当你认为你的工作已经完成时,要看到结果,使用 pgrep 命令。

$ nohup ping www.ubuntupit.com &
$ pgrep -a ping

5. 使用 disown 命令

如果您没有系统 root 权限,也许这个可以解决您的问题。 这 disown 命令可以使任何任务从正在运行的系统日志中不列出。 因此,它可以隐藏正在进行的进程以避免所有自动注销错误或信号挂断(SIGHUP)。 实际上,您可以使用 diswon 进程管理命令通过隐藏任务来保持 SSH 会话运行。

要从任务管理器中删除或隐藏您的任务,请在终端中使用 diswon 命令。

$ disown <task>

要检查任务的当前状态,请使用当前 shell 命令。

$ current shell

您还可以在单​​行终端命令中设置任务列表。

$ disown jobs1
$ disown jobs1 jobs2 ... jobsn

要检查任务列表,请使用 -l 命令。

$ jobs -l

要从窗口中删除所有当前作业,请键入 -a disown 命令后面的语法。

$ disown -a

要从窗口中仅删除一个或正在运行的作业,请使用 -r diswon 命令后面的语法。

$ disown -r

现在对于 SSH,要在会话连接后在后台运行作业,请使用 -h 句法。 即使在断开连接后,此过程也可以使您的 SSH 会话保持运行。

$ disown -h jobID
$ disown -h %2

修复 timeout RHEL 中的 SSH 错误

当您在 Red Hat Enterprise Linux (RHEL) 上连接到 SSH 时,您可能会经常遇到超时问题并导致连接丢失。 出现此问题是由于客户端或主机端的响应时间无效。 在您的 Red Hat 根目录中,您必须找到并编辑 sshd_config.txt 文件来解决这些超时问题。 完成后,即使断开连接,您也可以恢复 SSH 连接。

里面有 sshd_config.txt文件你会发现两个选项命名为 ClientAliveIntervalClientAliveCountMax,您需要编辑这些日志文件以最大化服务器到客户端的响应时间。 通过将 ClientAliveInterval 和 ClientAliveCountMax 的值相乘来计算超时间隔。

您只需根据您的系统和网络响应持续时间编辑这两个值的持续时间。 让你想最大化客户端间隔结束的时间 10 分钟和客户端计数的 5 次,然后你的文本注册表里面 sshd_config.txt 文件将如下所示。 然后,重新启动 SSH。

ClientAliveInterval 10m
ClientAliveCountMax 5

最后的想法

对于系统管理员来说,保持 SSH 会话和进程运行是满足客户端和完成任务的关键工作。 断开连接和频繁丢失会话非常烦人和烦人。 因此,在这篇文章中,我们试图讨论和说明 SSH 会话断开连接的原因,并描述了如何在断开连接后保持 SSH 会话运行的所有可能方法。

如果您曾经经历过 SSH 会话断开的麻烦,并且知道它可能有多烦人,请与我们分享您的经验。 如果您有任何要添加的内容或在评论部分询问与此帖子相关的任何内容,也请发表评论。 不要忘记在社交媒体上与您的朋友分享这篇文章。