Press "Enter" to skip to content

解决SSH客户端Broken pipe问题

经常使用命令行的尤其是我们玩VPS、云服务器的,SSH协议不可避免会用到,有的时候已经已经登录的SSH连接,一段时间没操作就会出现无响应或者显示断开的情况,断开之后需要重新登录,次数多了是真的烦,所以找了个办法避免长时间无操作掉线。

SSH断线输出

以我自己遇到的实际情况来说,这是登录之后无操作断线时的输出:

$ ssh user@test.vpsmore.com
user@test.vpsmore.com's password:
Linux HostdareHow 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Jun  9 22:33:32 2021 from 101.x.xx.xxx
user@test.vpsmore.com:~$
user@test.vpsmore.com:~$ client_loop: send disconnect: Broken pipe

内网或者国内的主机还好,要是大陆以外的主机,因为网络拥堵、防火墙终端连接或者丢包等情况,默认的SSH配置经常会遇到已登录的SSH断开的情况。

解决办法

其实解决办法也很简单,只需要修改下SSH的配置让本地客户端定时向服务端发送数据包保持连接就好了。

Windows、macOS及Linux系统,直接修改home目录下面的~/.ssh/config文件,如果这个文件不存在则新建一个,然后在里面添加一行配置就行:

ServerAliveInterval 10

这个10是定时时间,单位为秒,考虑到有的时候需要连接海外的主机,这里设置小一点更好保持SSH在线。

需要说明的是,这个方法可能只适合使用系统自带的SSH客户端,也就是通过cmd/Terminal等终端工具直接使用ssh命令连接的,如果是使用Termius或者Mobaxterm这种可能需要单独设置。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注