背景
使用ssh可以创建反向连接、内网穿透、端口转发等,但网络是不稳定的,连接断开时有发生。通过断线检测+断线重连+开机自启可以创建一个稳定的ssh隧道。
网上有现成的工具autossh
专门用来建立稳定的ssh连接,不过经过测试效果不好,故障率较高(可能是没有正确配置导致)。另一方面,在windows上安装autossh比较麻烦,需要自己编译。在Linux使用下面的方案可以不用额外安装其它软件。
端口转发例子
以内网穿透为例,假设内网中有一台树莓派(以下简称客户端),想借助一台有外网IP的服务器(以下简称服务器)创建端口转发,以实现在外网访问到内网树莓派的ssh服务。
在树莓派上执行:
ssh -NT -R 1122:127.0.0.1:22 用户名@服务器IP
执行之后即可以在服务器上登录到树莓派的ssh:
ssh pi@127.0.0.1 -p 1122
由于TCP连接是不稳定的,所以基于TCP的ssh端口转发连接也是不稳定的。如果网络断开,可能提示:
Connection to xxx.xxx.xxx.xxx closed by remote host.
断线重连
断线重连很简单,ssh命令退出后,重新执行命令建立连接即可。伪代码如下:
while(true){