如何解决SSH自动断开连接的问题

博物志428字 2分钟阅读

用 SSH 连远程服务器时,终端一段时间没活动,SSH 就会自动断开。

这时候终端可能会报:

packet_write_wait: Connection to xxx.xxx.xxx.xxx port xxxx: Broken pipe

这个自动断开机制是为了保护服务器和它的拥有者,防止未授权访问或滥用。

但它有时候也挺烦人的——没及时注意到连接断了,再想操作终端就会卡住。

想让它别断,可以配置保活。有两种改法。

服务端实现

一种是改 SSH 服务器的配置,文件通常是 /etc/ssh/sshd_config。里面有两个参数:

ClientAliveInterval
ClientAliveCountMax

ClientAliveInterval 是服务器向客户端发空包(null packet)的时间间隔。设为 60,就是每 60 秒发一个空包检测连接是否存活。 ClientAliveCountMax 是发多少个空包都没收到客户端响应后,就断开连接。

可以按自己的网络情况调这两个值。比如把 ClientAliveInterval 设为 120、ClientAliveCountMax 设为 10,就是每隔 120 秒发一个空包、最多试 10 次。这样即使终端一段时间没活动,连接也能保持。

改完配置后重启 SSH 服务(service sshd restart)即可生效。

客户端实现

另一种是改本地 SSH 客户端。如果你配好了 SSH 密钥连接,可以在本地 SSH 文件夹(通常是 .ssh)的配置文件里加:

ServerAliveInterval 120
ServerAliveCountMax 10

这样客户端会定期向服务器发请求,保持连接活跃。两个值同样可以按需调整。

如果还没配过 SSH 连接,可以在 SSH 文件夹里新建一个 config 文件,加上类似这样的配置:

Host *
  ServerAliveInterval 120
  ServerAliveCountMax 10

之后用 ssh [快捷方式] 或 ssh [IP地址] 连服务器,就会带上保活请求了。

参考