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

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

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

虽然这在 Ubuntu 中gnome-terminal似乎会暂停终端输入/输出,但并不影响 GNOME 终端软件本身的运行。因此,与其说这是一个 bug,gnome-terminal不如说是一个令人讨厌的 ssh 不一致问题。

那么,有没有办法可以防止/重新获得超时的 ssh 连接终端?

答案1

如果 sshd(服务器)一段时间内没有收到来自客户端的任何消息,它将关闭连接。您可以告诉客户端偶尔向服务器发送一个生命信号。

此项配置位于文件中~/.ssh/config。要每四分钟向远程主机发送一次信号,请将以下内容放入文件中~/.ssh/config

Host remotehost
  HostName remotehost.com
  ServerAliveInterval 240

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

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

Host *
  ServerAliveInterval 240

还要确保运行chmod 600 ~/.ssh/config,因为配置文件一定不是全世界可读的。

答案2

依次按下Enter~.可断开冻结的会话。

ssh 手册页中的“转义字符”部分解释了底层细节。

答案3

虽然这不是您问题的直接答案,但它与您的问题高度相关。您可以使用终端多路复用器,而不是尝试保持连接有效(所有连接最终都会消失),例如screen即使您的终端断开连接,也tmux可以在后台保持会话活动。

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

$ screen

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

$ screen -ls

要重新连接到会话:

$ screen -r <session>

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

您甚至可以断开会话并从主屏幕重新连接,从上次中断的确切位置继续。要断开会话,请使用 ,C-a然后使用C-dControl + A然后Control + D)。

简单的在线教程也一样。

在远程服务器上使用screentmux被视为最佳实践并且是强烈推荐。有些人甚至将screen其作为默认登录 shell,因此当他们连接时他们会立即开始一个新的screen会话。

答案4

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

文件:/etc/ssh/ssh_config

内容:

ClientAliveInterval XX
ClientAliveCountMax YY

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

摘自:

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

相关内容