Autossh外网IP反向连接内网

这里只说明一种场景流程,至于原理原因搜下autossh就行了

 

1:两台机器,一台只有内网IP,另一台有外网IP,比如

private server:192.168.100.111
public server:19.16.10.11

前提是内网这台能够ping通外网这台的外网IP地址,现在的需求是将public作为跳转机器,登陆外网机器后,能够跳转登陆到内网机器

 

2:两台机器分别创建密钥对,分别将公钥传到对方的.ssh/authorized_keys文件接在最后

这一步是为了双方在互通的时候省了指定私钥这个选项,至少要将内网机器的公钥传到外网机器上,使得内网登陆外网不需要指定私钥,如果这一个方向的也不想做,不用接着往下做了

具体做法

内网
ssh-keygen 
cat .ssh/id_rsa.pub 
外网 
上面公钥内容 >> .ssh/authorized_keys

如此一来,理论上内网通过ssh应该不需要指定key和输入密码就能登陆外网机器

ssh root@19.16.10.11

 

3:内网机器

安装autossh

apt-get install autossh

编辑开机启动脚本,随手只写了start和stop功能,想完善的自己补充

$ vi autosshd
#!/bin/bash

case "$1" in
	start)
		/usr/bin/autossh -M 2222 -NR 1111:localhost:22 root@19.16.10.11 -p22
		;;
	stop)
		pkill autossh
		;;
	*)
		echo "/etc/init.d/autosshd [start|stop]"
		exit1
		;;
esac
exit0

这里多说一句,debian系统默认/bin/sh链接的是/bin/dash,在执行shell脚本的时候,开头如果写的是/bin/bash,然后shell脚本又用sh来执行的时候,会报错,可以将sh的链接改成bash,操作方法

ln -sf /bin/bash /bin/sh

上面daemon脚本autosshd就是用来开机启动的,按照linux标准方法添加到开机启动即可

chmod a+x autosshd  
cp autosshd /etc/init.d/   
chkconfig --add autosshd   
chkconfig --level 2345 autosshd on

这里写到了开机启动,实际上内网机器需要执行的就是上面脚本里start)部分的一条命令,但假如不添加到daemon里开机启动,内网机器重启了,连接就断了,就没法通过外网机器跳转过来了

 

实际上到了这里,配置就已经结束了,上面其实主要就内网机器设置了一个进程的开机启动和拉起,只要这个进程存在,就能通过外网机器跳转到这里,具体操作方法如下

手动测试:
内网机器 
/etc/init.d/autosshd start 
外网机器 
ssh -i $key_pri localhost -p1111

这里按照上面只传了一个方向的公钥,所以这里反过来是需要私钥登陆,不出意外,应该可以直接登陆到内网机器

如果这里手动测试通过,内网机器随便你重启,autossh进程都会开机启动,进程只要在,外网机器随时可以反过来登陆

发表回复