一.介绍

前面介绍了ngrok和frp,虽然好用,但是对于某些很简单的需求来说可能也麻烦了,最好有啥能一键搞定的,这种情况下,你可能需要SSH反向连接了。

当然,由于SSH的特殊性,建议使用的服务器为国内服务器,以减小特殊干扰和网络波动导致的可能的瞎几把断线。

二.配置

这个对于Linux服务器来说,肯定有ssh对吧,没有你怎么连接的???所以我们也不考虑服务器需要安装点啥了,当然为了防止断线的情况,我们还是要装个程序滴,这个后面说。

①如果你本地也是Linux,或者装了比如Git啊Cygwin啥的,那么你本地就能直接执行ssh命令了,在这种情况下,一键(建议先不加-f参数来确认能否连上)

那个客户端能访问的IP我说明下,可以是本地比如localhost,也可以是局域网IP,甚至可以是你本地所能访问到的其它的IP,这种可能出现在多层局域网内,比如公司啥的,而远程IP可以省略其实,如果需要开放给公网请使用远程服务器的公网IP,另外-p指定ssh端口的参数默认是22,如果你是22的话可以省略,如果你用的不是密码的话请使用 -i 参数来指定key文件

举个最简单的栗子

这样就把本地的22端口暴露到的你服务器1.2.3.4的2222端口

当然,这儿有个问题,之前说了ssh本身还是挺容易受到干扰的,那么要是断开了怎么办?我们首先要解决的是密码问题,ssh命令默认不能添加密码参数,所以我们需要借助sshpass程序

使用方法很简单,在原来的ssh命令之前添加sshpass命令就行,类似如下

当然我还是建议使用key来验证的,安全还方便,教程在我博客里也有——>传送门

下面是自动连接,这个需要靠autossh程序

使用的话和ssh命令相比略有变化,因为后台参数-f在这儿是由autossh处理的,而不是ssh,所以要拆开来放前面,而为了监控掉线,多了个-M参数,后面跟的是监控端口,由于判断掉线,不被占用就行

那么,如果要合并起来,是否放一起就行?答案是错,如果你使用了sshpass,那么你的autossh不能加-f参数,因为sshpass需要autossh在前台请求密码才能实现输入,这点和expect差不多,而加上-f参数放后台后会无效,所以如果要使用sshpass请务必不要加-f参数,当然,我是推荐你单使用autossh然后配合-i参数来用key认证的

如果非要sshpass,那么只能如下了,不带-f

然后把这条命令丢到/etc/rc.local中就行了,当然你也可以选择脚本啊或者crontab之类的方法来实现开机启动,这儿我就不多说了

 

②本地是Windows,那么我们就要借助其它工具了,比如plink,这个是win下的ssh客户端,随便搜一下就有

命令略有变化,这个支持在命令中带密码,而指定端口的参数变成了大写的P,并且没有后台模式,指定key一样是-i

如果要防断线,那么写个批处理吧,很简单的

这样就行


Senraの小窝原创文章,转载请注明来自:内网穿透系列——SSH反向隧道 (最简单的内网穿透方案)