当我通过 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-d
(Control + A
然后Control + D
)。
有简单的在线教程也一样。
在远程服务器上使用screen
和tmux
被视为最佳实践并且是强烈推荐。有些人甚至将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