日常业务经常遇到需要从互联网服务器上去主动连接一台内网服务器,一般的解决方案有两种,一种是端口映射,将内网主机的某个端口映射出防火墙,相当于两个外网主机通信;另一种是内网主机主动连接到外网主机,这样NAT路由/防火墙就会在内网主机和外网主机之间建立映射,就可以相互通信了。但是,这种映射是NAT路由自动维持的,不会一直持续,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要再次主动连接到外网主机,建立连接。 此时如果利用autossh,当连接断开时,内网主机会自动去和互联网主机建立连接,如此可以建立稳定的通信,从而达到互联网稳定访问内网主机的目的。
比如互联网服务器 A(116.208.0.109) 要连接内网服务器 B (192.168.200.110)
1、配置免密登录(内网服务器要利用autossh 实现断线自动重连,首先要配置免密登录。)
1.1 $ ssh-keygen
…(一直按Enter,最后在~/.ssh/下生成密钥)
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
1.2.进入~/.ssh/ 目录,复制B主机上生成的id_rsa.pub公钥然后上传到外网A主机上,执行如下命令将内容加入到~/.ssh/authorized_keys中
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
2、安装autossh 。
CentOS/RHEL 6 或早期版本, 开启第三库Repoforge库后, 可以直接使用yum安装,在CentOS/RHEL 7以后,autossh不再是预编译包,所以需要从源码编译安装。
2.1、centos6安装autossh
centos 6,autossh 在RepoForge库里面,首先需要开启第三库Repoforge库,具体步骤如下:
rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 安装包下载地址:
yum安装autossh
yum install autossh
2.2、centos7安装autossh
centos7需要使用源码安装
将安装包autossh.tgz上传到内网服务器B,并解压编译。
$ cd autossh-1.4e
$ ./configure
$ make
$ make install
3、配置反向ssh
3.1、在内网服务器B执行:
$ autossh -M 10085 -NR 22:localhost:22 root@116.208.0.109 -p30022
登录互联网服务器A,可以看到10086端口已经处于监听状态
ssh -ant|grep 10086
3.2、在互联网服务器A输入命令测试是否可以登录:
ssh localhost -p10086
发现可以正常从服务器A连接到服务器B