保持SSH会话存活

Hai*_*ang 211 linux ssh terminal

ssh -p8520 username@remote_host用来登录远程服务器.

问题:

当我在工作场所时,它始终连接并正常工作.不幸的是,在我从家里连接远程服务器后10到15分钟终端冻结了.

控制台上没有错误/超时报告,但光标不能再移动.

当进入w检查登录用户时,一些僵尸登录用户在那里,我必须手动杀死他们.

这很烦人.谁能帮我?

小智 381

如果sshd(服务器)暂时没有从客户端听到任何声音,它将关闭连接.您可以告诉您的客户偶尔向服务器发送生命信号.

此配置位于文件"〜/ .ssh/config"中,如果配置文件不存在则创建它.要将信号每四分钟(240秒)发送到远程主机,请将以下内容放入"〜/ .ssh/config"文件中.

Host remotehost:
    HostName remotehost.com
    ServerAliveInterval 240
Run Code Online (Sandbox Code Playgroud)

这就是我在"〜/ .ssh/config"中的内容:

要为所有主机启用它,请使用:

Host *
    ServerAliveInterval 240
Run Code Online (Sandbox Code Playgroud)

还要确保运行:

chmod 600 ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

因为配置文件不能是世界可读的.

  • @ user271996,为什么要为客户端设置重启守护进程? (23认同)
  • @youkaichao 经常有这种混乱。作为一名 API 设计者,我有理由同时采用这两种方式。最终,最关键的是所选标准的良好文档。 (5认同)
  • @youkaichao 这就像你去卡尔家,在冰箱上的一张纸条上看到“迈克的地址:<地址>”。迈克的名字写在卡尔的房子里,这一点并不令人困惑;卡尔是唯一一个不需要出现在卡尔家里的名字。 (5认同)
  • 我总是对配置名称感到困惑:客户端使用`ServerAliveInterval`,而服务器使用`ClientAliveInterval`。真是一团糟。 (3认同)
  • 以防万一这个配置文件在你的 PC/linux 机器上不明显 (2认同)
  • Windows 的“c:/users/youruser/.ssh/config” (2认同)
  • @BilalSiddiqui 644 允许群组和公众读取您的配置文件,可能会泄漏信息。ssh_config 的联机帮助页指定“用户读/写,其他人不可写”,这意味着 644 就可以了。但通常使用 600 更安全,因为 644 在某些情况下可能会触发错误。 (2认同)

Rya*_*yan 133

我想要一次性解决方案:

ssh -o ServerAliveInterval=60 myname@myhost.com
Run Code Online (Sandbox Code Playgroud)

将其存储在别名中:

alias sshprod='ssh -v -o ServerAliveInterval=60 myname@myhost.com'
Run Code Online (Sandbox Code Playgroud)

现在可以像这样连接:

me@MyMachine:~$ sshprod
Run Code Online (Sandbox Code Playgroud)

  • 他的意思是"一次性",如"它只能工作一次",而不是"我只需要写一次". (10认同)
  • 这很酷,但不完全是"一次性解决方案".如果你要不止一次连接到服务器,为什么不做`Host*`&`ServerAliveInterval 240`(或者指定主机名,如果你只想要`myname @ myhost.com`,就像来自rockymonkey555的答案一样?设置别名在任何方面都不容易. (9认同)
  • 或者,只是在你的〜/ .bashrc创建别名:`别名的ssh ='的ssh -o ServerAliveInterval = 60'` (6认同)
  • 是的,如果您将“一次”理解为“一次性使用”,那么这就完美地完成了这项工作。 (3认同)
  • 如果您想要一个将 `ServerAliveInterval` 设置为 `60` 的“一行”,那就太好了。然而,当你可以使用 `.ssh/config` 时使用 bash 别名是愚蠢的。 (2认同)
  • @netikras 我不明白别名如何帮助改变 IP 地址。如果您想使用别名,请使用它。我个人宁愿只使用该工具的内置配置选项,而不是重新发明自己的配置选项。 (2认同)

Jef*_*ort 41

对于那些想知道的人,@ edward-coast

如果要为服务器设置保持活动状态,请将其添加到/etc/ssh/sshd_config:

ClientAliveInterval 60
ClientAliveCountMax 2
Run Code Online (Sandbox Code Playgroud)

ClientAliveInterval:设置超时间隔(以秒为单位),之后如果没有从客户端收到数据,sshd(8)将通过加密通道发送消息以请求客户端的响应.

ClientAliveCountMax:设置客户端活动消息的数量(见下文),可以在没有sshd(8)从客户端接收任何消息的情况下发送.如果在发送客户端活动消息时达到此阈值,则sshd将断开客户端连接,从而终止会话.

  • 这是错误的,查看运行ssh守护程序的服务器部分的"man sshd_config",而不是客户端配置. (6认同)
  • 如果您希望服务器在没有响应的死连接上断开连接,则仅在服务器上设置 `ClientAliveInterval`,并且您可以自定义发生这种情况的频率和时间。 (3认同)

Rub*_*min 15

腻子设置

FYI Putty用户可以在此处设置选项


min*_*s23 11

我们可以通过遵循全局配置来保持ssh连接的活跃性

将以下行添加到/etc/ssh/ssh_config文件中:

ServerAliveInterval 60
Run Code Online (Sandbox Code Playgroud)

  • @EdwardCoast 它适用于客户端计算机。我在Mac上测试过 (2认同)