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


235

当我通过ssh连接到某些服务器时,它超时并“冻结”终端(不接受输入,不断开连接,无法Ctrl-C杀死ssh进程或其他任何操作)。

gnome-terminal尽管这似乎在Ubuntu 中暂停了终端的输入/输出,但并不影响GNOME终端软件本身的操作。因此,gnome-terminal与ssh相比,与其说是令人讨厌的不一致,不如说是一个bug 。

因此,有没有办法防止/重新注册终端超时的ssh连接?


Answers:


256

sshd(服务器)如​​果在一段时间内未收到客户端的任何消息,则关闭连接。您可以告诉客户端偶尔将生命周期信号发送到服务器。

此文件的配置在文件中~/.ssh/config。要将信号每隔四分钟发送到remotehost,请在中输入以下内容~/.ssh/config

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

这就是我所拥有的~/.ssh/config

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

Host *
  ServerAliveInterval 240

还要确保运行chmod 600 ~/.ssh/config,因为配置文件一定不能被世界读取。


1
谢谢sblair的帮助,我非常感谢。我将“不应”改回“不得”,因为ssh会检查文件的权限,并且如果文件对世界或组可读,则它将失败。
路德维希·韦尼尔

1
这不是OP所要求的。由于没有活动,他没有被开学。他正在尝试连接,并且终端处于冻结状态。
塞林2014年

这是~/.ssh/config哪里
用户

1
@User'〜/'代表您的主文件夹。“ .ssh”是主文件夹中的文件夹。
wkm 2015年

6
如果您的连接实际上已丢失,这将毫无用处……
so12311 2015年

248

Enter~.一前一后从冷冻断开会话。

ssh手册页中的“ ESCAPE CHARACTERS”部分介绍了底层详细信息。


40
在我看来,这个答案可以更准确地回答问题,无论如何,这就是我一直在寻找的答案。
CoatedMoose 2012年

请注意,您需要取消对该行EscapeChar ~/etc/ssh/ssh_config(或者~/.ssh/ssh_config,如果你喜欢)。
Aditya MP

@adityamenon不,EscapeChar ~已经是内置默认值。
Peter Eisentraut

2
@Mark问题询问“是否有办法防止终端超时的 ssh连接重新获得终端?” 强调我的。
CoatedMoose

2
尽管在问题中这是不正确的,但这正是我想要的。
Subin Sebastian

38

即使这不是您问题的直接答案,也与您遇到的问题高度相关。而不是试图保持连接(所有连接最终死亡),可以使用终端复用器,像screentmux该会话保持活动状态,即使你的终端被断开的背景。

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

$ screen

然后,继续进行您的外壳工作,就像平常一样。现在,如果连接断开了,那么当您可以重新联机并通过SSH重新连接到服务器时,您将获得当前会话的列表:

$ screen -ls

要重新加入会话:

$ screen -r <session>

<session>PID或会话名称在哪里。您将重新连接到会话,您可以从上次中断的地方继续!

您甚至可以分离会话并从家中重新连接,以从上次中断的确切地点接起电话。要分离会话,请使用,C-a后跟C-d(that Control + AControl + D)。

也有简单的在线教程

在远程服务器上使用screentmux在远程服务器上被认为是最佳做法强烈建议您使用它。有些人会尽量使用screen默认的登录外壳,因此当他们连接时,他们会立即开始新的screen会话。


2
另一个替代方法是使用mosh:mosh.mit.edu
Zombies

如果您使用的热点或wifi偶尔掉线,这将特别有用。
兰德尔

11

尝试附加-o ServerAliveInterval=30到您的连接字符串(30意味着30秒,当然可以调整)



1

对于那些想阻止客户首先超时的人。

您可以尝试ConnectTimeout 0在配置文件中进行设置。值0表示除非关闭,否则连接将无限期保持活动状态。

您的配置(或ssh_config)文件可能如下所示:

Host *
   ConnectTimeout 0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.