2010-01-20 23:33:01 +0000 2010-01-20 23:33:01 +0000
236
236

避免ssh连接超时和冻结GNOME终端的方法

当我通过ssh连接到某些服务器时,它会超时并 “冻结 "终端(不接受输入,不断开连接,不能Ctrl-C杀死ssh进程什么的)。

这个在Ubuntu的gnome-terminal不过好像是暂停了终端的输入/输出,并不影响GNOME终端软件本身的运行。所以与其说是gnome-terminal的bug,不如说是ssh烦人的不一致。

那么,有没有办法防止/恢复终端因ssh连接超时的情况?

答案 (7)

259
259
259
2010-01-20 23:53:48 +0000

sshd(服务器)如果一段时间内没有收到客户端的任何消息,就会关闭连接。你可以告诉你的客户端每隔一段时间向服务器发送一个生命信号。

这方面的配置在文件~/.ssh/config中。要想每隔四分钟向远程host发送一次信号,请在~/.ssh/config中加入以下内容。

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

这是我在~/.ssh/config中的配置。

要使所有主机都能使用。

Host *
  ServerAliveInterval 240

同时确保运行chmod 600 ~/.ssh/config,因为配置文件必须是不可读的。

250
250
250
2010-01-20 23:44:01 +0000

接连按Enter、~、.来断开被冻结的会话。

ssh手册中的 “ESCAPE CHARACTERS "一节解释了其中的细节。

39
39
39
2012-07-03 01:28:14 +0000

尽管这不是你问题的直接答案,但它与你的问题高度相关。你可以使用终端多路复用器,比如 screen tmux,而不是试图保持连接的生命力 (所有的连接最终都会死亡),即使你的终端被断开,也能在后台保持会话的生命力。

基本上,当你登录到SSH服务器时,你会立即运行screen,它将创建并附加一个新的会话:

$ screen

然后你就像平常一样使用shell进行工作。现在如果连接中断了,当你可以重新上线并通过SSH重新连接到服务器时,你会得到一个当前会话的列表。

$ screen -ls

要重新连接到一个会话:

$ screen -r <session>

其中<session>是PID或一个会话名称。您将重新连接到您的会话,您可以从您离开的地方继续。

您甚至可以脱离会话并从原点重新连接,从您离开的地方开始。要脱离会话,您可以使用C-a然后是C-d(即Control + A然后是Control + D)。

还有【简单的在线教程】(http://www.mattcutts.com/blog/a-quick-tutorial-on-screen)。

在远程服务器上使用screentmux被认为是好的做法,也是高的推荐。有些人甚至将screen作为他们的默认登录shell,所以当他们连接时,他们会立即开始一个新的screen会话。

12
12
12
2014-02-06 14:13:27 +0000

试着将-o ServerAliveInterval=30追加到你的连接字符串中(30表示30秒,当然可以调整)

6
6
6
2016-02-12 22:45:27 +0000

你也可以从SSH服务器端设置一个空闲超时间隔:

文件:/etc/ssh/ssh_config

内容。

ClientAliveInterval XX
ClientAliveCountMax YY

这与客户端设置的方式完全相同,但空包是从服务器发送的,而不是客户端。

提取自: http://www.sysadmit.com/2016/02/linux-y-vmware-ssh-evitar-desconexion.html

2
2
2
2015-12-17 02:19:43 +0000

对于那些想在第一时间防止客户端超时的人来说。

你可以尝试在配置文件中设置ConnectTimeout 0。值为0意味着除非关闭,否则连接将无限期地维持下去。

你的配置文件(或ssh_config)可能是这样的。

Host *
   ConnectTimeout 0
0
0
0
2020-01-24 11:55:41 +0000

在我的情况下,问题是在MTU大。如果你使用NAT,你可以在路由器上改变MTU,但我在服务器上改变MTU。

sudo /sbin/ifconfig eth0 mtu 1036
sudo /etc/init.d/networking restart

在Windows上,你也可以增加这个键:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpMaxDataRetransmissions"=dword:00000010
```。