在远程服务器上工作时,我在终端中打开 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 的状态栏中会显示时钟(以及磁盘空间和其他有用数据)。屏幕上显示时钟通常可以避免连接超时。