如何防止 SSH 会话冻结?

如何防止 SSH 会话冻结?

我已经在 SSH 客户端/服务器配置文件中将ServerAliveInterval少数机器ClientAliveInterval设置为 540(我认为将其设置为超过该值并不是一个好主意)。我使用的许多 SSH 会话目前在几分钟后就会冻结。

我该如何修复它?我想要的是一个会话根本不会冻结,这样,例如,如果我在 8 点打开一个会话并且 4 小时没有使用它,那么在 12 点仍然可以再次使用它,而无需再次登录。

答案1

您所做的更改/etc/ssh/ssh_config/etc/ssh/sshd_config正确的,但仍然不会产生任何效果。

要使您的配置正常工作,请在客户端上进行以下配置更改:

/etc/ssh/ssh_config

Host *
ServerAliveInterval 100

服务器活动间隔 客户端将每 100 秒向服务器发送一个空数据包以保持连接处于活动状态

空包 由服务器发送给客户端。客户端向服务器发送相同的数据包。 TCP NULL 数据包不包含任何控制标志,如 SYN、ACK、FIN 等,因为服务器不需要客户端的回复。 NULL 数据包的描述如下:https://www.rfc-editor.org/rfc/rfc6592

然后在服务器上配置sshd部分。

/etc/ssh/sshd_config

ClientAliveInterval 60
TCPKeepAlive yes
ClientAliveCountMax 10000

客户端活动间隔服务器将等待 60 秒,然后向客户端发送空数据包以保持连接活动

TCP保活是否可以确保某些防火墙不会丢弃空闲连接。

最大客户端存活数即使服务器没有收到客户端返回的任何消息,服务器也会向客户端发送活动消息。

最后重新启动ssh server

service ssh restart 或者 service sshd restart取决于您使用的系统。

答案2

个人建议:screen在远程主机上使用;只要它在终端中保持活动状态,它就会设法使您的连接保持活动状态。

以下是我通常添加的内容,/etc/screenrc以快速识别我的屏幕会话:

hardstatus alwayslastline
hardstatus string "%{= kG}[ %{G}%H %{g}][ %{=kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]"
defscrollback 8192

编辑 :提示。

hardstatus字符串将显示底部状态行,如下所示: 具有三个打开选项卡的屏幕会话示例

回滚缓冲区也扩展到 8192 行,而不是通常的 1000-1500 行(取决于发行版)。

答案3

如果问题是笔记本电脑处于休眠状态或网络连接不太完美,我建议使用mosh它运行ssh并允许自动重新连接。

来自网站:

Mosh(手机壳)

远程终端应用程序,允许漫游,支持间歇性连接,并提供智能本地回显和用户击键的行编辑。

Mosh 是 SSH 的替代品。它更加稳健、响应更快,尤其是通过 Wi-Fi、蜂窝网络和长距离链接。

Mosh 是免费软件,适用于 GNU/Linux、BSD、macOS、Solaris、Android、Chrome 和 iOS。

tmux(或更旧的screen)结合使用,这使我可以ssh从笔记本电脑连接到服务器,并保持连接数天,即使在更改 wifi 连接和移动数据丢失的情况下也是如此。

答案4

/etc/sshd_config检查主机上的 sshd 配置IdleTimeout环境

IdleTimeout time
Sets idle timeout limit to time in seconds (s or nothing afternumber), 
in minutes (m), in hours (h), in days (d), or in weeks (w).If the 
connection have been idle (all channels) for that long time thechild 
process is killed with SIGHUP, and connection is closed down.

相关内容