利用autossh实现对局域网内服务器的访问以及原理分析

       前阵子用ssh反向代理,实现了在外地对局域网内服务器资源的访问的需求。详情见《利用SSH反向代理,实现对局域网内服务器的访问》。用了几天发现连接不稳定,即使SecureCRT设置了“反空闲”功能,也会偶尔出现A和B服务器断开连接的情况。一旦断线,B服务器不会主动连上A服务器,就没法用了。经过研究,用AutoSSH可以实现断线重连功能。前面的配置过程请看《利用SSH反向代理,实现对局域网内服务器的访问》。本文只记录autossh的配置过程。

一、安装配置autossh

     autossh官方网址是https://www.harding.motd.ca/autossh/。最新版本是1.4g。在B服务器运行以下命令安装autossh:

[root@host ~]# wget https://www.harding.motd.ca/autossh/autossh-1.4g.tgz
[root@host ~]# gunzip -c autossh-1.4g.tgz | tar xvf -
[root@host ~]# cd autossh-1.4g
[root@host ~]# ./configure
[root@host ~]# make
[root@host ~]# make install
[root@host ~]# vi /etc/rc.d/rc.local,在文件最后加上一行:
/usr/local/bin/autossh -M 10000 -CNfR 8822:127.0.0.1:22 root@170.77.149.2

#命令参数说明
-M  公网A服务器sshd服务端和局域网B服务器ssh客户端都需要监听的端口,这个端口+1的端口,是B服务器的autossh需要监听的端口
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(A服务器)的某个端口(8822)转发到本地主机(B服务器)指定的端口(22)

配置好后,重启B服务器即可。

二、autossh原理分析

      在B服务器上运行命令:

[root@host ~]# ps aux|grep ssh


可以看到两个有关进程:

  • 进程1:/usr/local/bin/autossh -M 10000 -CNR  8822:127.0.0.1:22 root@170.77.149.2
  • 进程2:/usr/bin/ssh -L 10000:127.0.0.1:10000 -R 10000:127.0.0.1:10001 -CNR 8822:127.0.0.1:22 root@170.77.149.2

进程1是系统开机自启动的,进程2是进程1拉起来的。autossh并没有实现代理功能,它是启动了ssh来实现代理功能。从进程2的参数看,ssh创建了一个正向代理和两个反向代理。把ssh的参数拆开分析:
       -R 8822:127.0.0.1:22  root@170.77.149.2这组参数创建的反向代理,作用与前一篇帖子《利用SSH反向代理,实现对局域网内服务器的访问》里说明的相同。
      -R 10000:127.0.0.1:10001  root@170.77.149.2这组参数创建了一个反向代理,-L 10000:127.0.0.1:10000  root@170.77.149.2这组参数创建里一个正向代理。这两个正反代理通道,在公网的A服务器的10000端口闭合。

       往B服务器的10000端口发数据,会通过ssh隧道跑到A服务器的10000端口,然后再通过ssh隧道跑回B服务器的10001端口(autossh在监听)。autossh定时往本地的10000端口发心跳指令,如果autossh从本地的10001端口收到了发送出去的心跳指令,说明ssh隧道是正常的。如果autossh从本地的10001端口没收到心跳指令,说明ssh隧道异常了,则autossh重启ssh。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值