保持SSH会话
1. 概述
有时我们需要保持SSH 会话处于活动状态以保持应用程序运行,或者只是为了避免在返回到我们正在使用的 SSH 窗口时感到沮丧。
在本教程中,我们将了解如何通过防止 SSH 会话超时或直到我们物理关闭终端/bash 窗口来保持 SSH 会话处于活动状态。
2. 为什么 SSH 会关闭连接?
为了让我们使用 SSH 连接到服务器,ssh 守护进程 (sshd) 必须在目标服务器上运行。如果客户端不定期向服务器发送信息,那么服务器会在经过一定时间后关闭连接。
为了防止服务器关闭我们的 SSH 连接,我们可以在客户端机器或服务器上配置一个配置文件。
3. 设置配置文件
有几个文件可以更新,以帮助防止 SSH 会话超时,具体取决于我们是客户端还是服务器端。
3.1.客户端配置文件
客户端配置文件的位置是$HOME/.ssh/config。**如果我们打开终端并输入cat $HOME/.ssh/config,我们可能会收到一条消息“找不到文件” :
$ cat $HOME/.ssh/config
cat: /.ssh/config: No such file or directory
如果我们看到上面的消息,那么我们必须手动创建配置文件。如果.ssh文件夹不存在,我们可以先创建它:
$ mkdir $HOME/.ssh
如果此文件夹已存在,我们将看到一条消息“文件存在”。如果该文件夹不存在,我们将看不到任何输出。无论哪种方式,我们现在都准备好创建配置文件了。我们可以使用touch命令来做到这一点:
$ touch $HOME/.ssh/config
一旦我们创建了配置文件,我们还必须运行chmod 命令以确保该文件不是世界可读的:
$ chmod 600 $HOME/.ssh/config
我们现在可以使用任何文本编辑器(例如nano或vim )将我们的规则添加到配置文件中。通过运行nano $HOME/.ssh/config我们在终端/bash 窗口内的基本文本编辑器中打开配置文件。
现在让我们在配置中添加几行:
Host example
Hostname example.com
ServerAliveInterval 240
此配置指定仅在 SSH 会话连接到示例域时应用的设置。
ServerAliveInterval是客户端向服务器发送信号之前的时间量(以秒为单位)。
在编辑器中输入上述文本后,我们必须按Ctrl+O,然后按**[Enter]覆盖我们在上一步中创建的配置文件。然后要退出 nano,我们必须按Ctrl+X**。
或者,我们可以用 * 替换example来为我们通过 SSH 连接的任何域设置此规则:
Host *
ServerAliveInterval 240
我们可以使用相同的步骤来使用nano打开和保存配置文件。
3.2. 服务器端配置文件
在某些情况下,我们可能可以访问服务器上的配置文件。如果是这种情况,我们可以配置我们希望服务器何时关闭 SSH 连接。
在服务器上编辑配置文件的过程类似于客户端配置文件,但有一些不同之处。
一、服务器端config文件的文件位置是/etc/ssh/sshd_config **
现在我们使用nano将ClientAliveInterval关键字添加到配置文件中。
请注意,此关键字在其中使用“客户端”而不是我们在前面示例中看到的“服务器”。
ClientAliveInterval 60
ClientAliveInterval是以秒为单位指定的超时间隔。如果服务器从客户端接收到数据后的时间超过了超时间隔,则服务器将向客户端发送消息请求响应。
3.3. 为什么不设置为永不断开连接?
虽然将 SSH 会话设置为永不断开连接可能很诱人,但在某些情况下,我们为 SSH 设置超时会更明智。
如果我们连接的服务器是我们自己维护的,那么设置超时可能没有充分的理由。但是,如果我们将服务器托管在AWS E3 等平台上,如果我们不设置 timeout 可能会变得昂贵。许多云托管平台对使用服务器每分钟收费,即使我们没有积极使用它,保持 SSH 会话持续活动也会增加成本。
要在客户端上配置超时,我们可以在与上述相同的配置文件中使用ServerAliveCountMax关键字:
Host *
ServerAliveInterval 240
ServerAliveCountMax 2
不再让客户端每 240 秒继续发送信号,客户端现在还将侦听从服务器返回的信号。如果它通过ServerAliveInterval两次而没有收到信号,它将关闭 SSH 会话。
同样,我们可以在服务器上设置类似的配置:
ClientAliveInterval 60
ClientAliveCountMax 2
这将每 60 秒从服务器向客户端发送一个信号。如果它通过ClientAliveInterval两次而没有从客户端收到信号,则服务器将关闭 SSH 会话。
这通常是由于客户端和服务器之间的网络断开连接。
在大多数情况下,**客户端配置需要设置为低于服务器默认超时的值。**服务器上默认禁用连接终止,因此如果不想更改此行为,我们不需要调整服务器配置。
如果没有为ServerAliveCountMax或ClientAliveCountMax提供值,则默认值 3 将应用于两者。