经常使用命令行的尤其是我们玩VPS、云服务器的,SSH协议不可避免会用到,有的时候已经已经登录的SSH连接,一段时间没操作就会出现无响应或者显示断开的情况,断开之后需要重新登录,次数多了是真的烦,所以找了个办法避免长时间无操作掉线。
SSH断线输出
以我自己遇到的实际情况来说,这是登录之后无操作断线时的输出:
$ ssh user@test.cloudbool.com
user@test.cloudbool.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.cloudbool.com:~$
user@test.cloudbool.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这种可能需要单独设置。