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

这似乎在Ubuntu的gnome-terminal中,尽管它似乎正在暂停终端的输入/输出,并且不会影响GNOME终端软件本身的操作。因此,gnome-terminal的bug更少,而不是ssh的烦扰。

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

评论

如何可靠地保持SSH隧道打开的可能重复项?

#1 楼

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

此配置在文件~/.ssh/config中。
每四个发送一次信号分钟即可到达remotehost,
将以下内容放入您的~/.ssh/config中。

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240


这就是我~/.ssh/config中的内容。

要将其启用以供所有主机使用:

Host *
  ServerAliveInterval 240


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

评论


谢谢sblair的帮助,我非常感激。我将“不应”改回“不得”,因为ssh会检查文件的权限,并且如果文件是世界或组可读的文件,它将失败。

–路德维希·魏尼尔(Ludwig Weinzierl)
2011年10月1日在20:26

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

–塞林
2014年7月2日在16:43

〜/ .ssh / config在哪里?

–用户
2014-09-26 21:48

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

– wkm
15年1月28日在12:44



如果您的连接实际上丢失了,这是没有用的...

–so12311
15年2月4日在19:25

#2 楼

按Enter,〜、。一个接一个地从冻结的会话断开连接。

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

评论


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

–CoatedMoose
2012年12月2日,下午5:06

请注意,您需要取消注释/ etc / ssh / ssh_config中的EscapeChar〜行(如果需要,也可以取消注释〜/ .ssh / ssh_config)。

– Aditya M P
13年8月3日在6:19

@CoatedMoose问题标题要求避免ssh连接超时的方法;这是冻结连接后终止连接的一种方法。这是一个非常有用的技巧,但不是该问题的更准确答案。

–马克
2015年4月5日,12:57

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

–CoatedMoose
15年4月7日在18:55

即使在问题中这是不正确的,这也正是我想要的。

– Subin Sebastian
16年4月28日在12:37

#3 楼

即使这不是您问题的直接答案,也与您遇到的问题高度相关。可以使用终端多路复用器(例如screentmux)来使会话保持活动状态,即使您的终端断开连接也可以使会话保持活动状态,而不是尝试使连接保持活动状态(所有连接最终都将终止)。

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

$ screen


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

$ screen -ls


重新连接到会话:

$ screen -r <session>


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

您甚至可以断开会话并重新连接到家中,以从上次中断的确切位置接听。要分离会话,请使用C-a,然后使用C-d(即Control + AControl + D)。

也有简单的在线教程。

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

评论


另一种选择是使用mosh:mosh.mit.edu

–僵尸
2015年12月25日19:13

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

–兰德尔
16年7月13日在17:27

#4 楼

尝试将-o ServerAliveInterval=30附加到连接字符串(30表示30秒,当然可以调整)

#5 楼

您还可以从SSH服务器端设置空闲超时间隔:

文件:/etc/ssh/ssh_config

内容:

ClientAliveInterval XX
ClientAliveCountMax YY


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

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

评论


要配置服务器设置,您必须修改/ etc / ssh / sshd_config。 ssh_config用于客户端设置,sshd_config(SSH守护程序)是服务器部分。

– Mikko Rantalainen
20-11-18在17:05

#6 楼

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

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

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

Host *
   ConnectTimeout 0


#7 楼

就我而言,问题在于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


#8 楼

不确定这是否也适用于gnome终端,但是您应该在杀死ssh客户端进程之后再次使用该终端。
pgrep -a ssh

为您提供进程ID,然后您可以将其杀死
kill <pID>