这里只说明一种场景流程,至于原理原因搜下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进程都会开机启动,进程只要在,外网机器随时可以反过来登陆