减少 SSH 会话过期后检索本地终端之前的延迟

减少 SSH 会话过期后检索本地终端之前的延迟

在远程服务器上工作时,我在终端中打开 SSH 连接ssh remote_username@remote_host

由于某种原因,如果我让此连接空闲太久,终端就会变得无响应,例如,无论我按什么键,都不会发生任何事情。

但经过一段时间后,我在底层本地终端上重新获得了控制权,可以再次工作了:

remote_user@remote_server:~$ # <--- whatever I type, nothing happens
# many minutes later, this is printed:
remote_user@remote_server:~$ client_loop: send disconnect: Broken pipe
local_user@local_machine:~ # and I'm given back the hand on my local terminal

这段时间相当长(很多分钟)。

因此我的问题是:有没有办法在 Ubuntu 22.04.1 LTS 上参数化这个延迟?

版本控制

  • SSH:OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
  • 重击:GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

答案1

您可能需要设置选项ServerAliveInterval...来自man ssh_config

服务器存活间隔

设置超时间隔(以秒为单位),如果在此间隔内未从服务器收到任何数据,ssh(1) 将通过加密通道发送一条消息以请求服务器做出响应。默认值为 0,表示这些消息将不会发送到服务器。

它以秒数为单位的值...例如:

ServerAliveInterval 120

您可以在ssh文件~/.ssh/config默认情况下它不存在,因此你可能需要创建此文件)或在文件中全局/etc/ssh/ssh_config添加...请注意,您应该将其添加到Host关键字下...例如,有/etc/ssh/ssh_config一个关键字Host *意味着将以下参数应用于所有远程主机...因此,您可以将它添加到现有参数中,例如:

Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    ServerAliveInterval 120

或者,如所述man ssh

-o 选项

可用于以配置文件中使用的格式提供选项。

您可以直接在命令本身中设置该选项...例如像这样:

ssh -o ServerAliveInterval=120 user@host

答案2

我有时在家里连接到远程服务器时会看到这种情况。一种解决方法是在远程端运行一些产生输出的东西,这样流量就会不断流动,但不会太多,以免占用带宽。我使用的是屏风

在此处输入图片描述

运行时,Byobu 的状态栏中会显示时钟(以及磁盘空间和其他有用数据)。屏幕上显示时钟通常可以避免连接超时。

相关内容