一.介绍
前面介绍了ngrok和frp,虽然好用,但是对于某些很简单的需求来说可能也麻烦了,最好有啥能一键搞定的,这种情况下,你可能需要SSH反向连接了。
当然,由于SSH的特殊性,建议使用的服务器为国内服务器,以减小特殊干扰和网络波动导致的可能的瞎几把断线。
二.配置
这个对于Linux服务器来说,肯定有ssh对吧,没有你怎么连接的???所以我们也不考虑服务器需要安装点啥了,当然为了防止断线的情况,我们还是要装个程序滴,这个后面说。
①如果你本地也是Linux,或者装了比如Git啊Cygwin啥的,那么你本地就能直接执行ssh命令了,在这种情况下,一键(建议先不加-f参数来确认能否连上)
ssh -fCNR 远程IP:远程端口:客户端能访问的IP:对应的端口 ssh用户名@ssh服务器 -p ssh端口 #参数说明 f:后台运行 C:启用gzip压缩 N:仅转发端口,不执行命令 R:反向代理
那个客户端能访问的IP我说明下,可以是本地比如localhost,也可以是局域网IP,甚至可以是你本地所能访问到的其它的IP,这种可能出现在多层局域网内,比如公司啥的,而远程IP可以省略其实,如果需要开放给公网请使用远程服务器的公网IP,另外-p指定ssh端口的参数默认是22,如果你是22的话可以省略,如果你用的不是密码的话请使用 -i 参数来指定key文件
举个最简单的栗子
ssh -fCNR 2222:localhost:22 root@1.2.3.4
这样就把本地的22端口暴露到的你服务器1.2.3.4的2222端口
当然,这儿有个问题,之前说了ssh本身还是挺容易受到干扰的,那么要是断开了怎么办?我们首先要解决的是密码问题,ssh命令默认不能添加密码参数,所以我们需要借助sshpass程序
yum install sshpass -y
使用方法很简单,在原来的ssh命令之前添加sshpass命令就行,类似如下
sshpass -p "ssh密码" ssh -fCNR 2222:localhost:22 root@1.2.3.4
当然我还是建议使用key来验证的,安全还方便,教程在我博客里也有——>传送门
下面是自动连接,这个需要靠autossh程序
yum install autossh -y
使用的话和ssh命令相比略有变化,因为后台参数-f在这儿是由autossh处理的,而不是ssh,所以要拆开来放前面,而为了监控掉线,多了个-M参数,后面跟的是监控端口,由于判断掉线,不被占用就行
autossh -M 5678 -f -CNR 2222:localhost:22 root@1.2.3.4
那么,如果要合并起来,是否放一起就行?答案是错,如果你使用了sshpass,那么你的autossh不能加-f参数,因为sshpass需要autossh在前台请求密码才能实现输入,这点和expect差不多,而加上-f参数放后台后会无效,所以如果要使用sshpass请务必不要加-f参数,当然,我是推荐你单使用autossh然后配合-i参数来用key认证的
如果非要sshpass,那么只能如下了,不带-f
sshpass -p "ssh密码" autossh -M 5678 -CNR 2222:localhost:22 root@1.2.3.4
然后把这条命令丢到/etc/rc.local中就行了,当然你也可以选择脚本啊或者crontab之类的方法来实现开机启动,这儿我就不多说了
②本地是Windows,那么我们就要借助其它工具了,比如plink,这个是win下的ssh客户端,随便搜一下就有
命令略有变化,这个支持在命令中带密码,而指定端口的参数变成了大写的P,并且没有后台模式,指定key一样是-i
plink.exe -pw "ssh密码" -CNR 2222:localhost:22 root@1.2.3.4 -P 22
如果要防断线,那么写个批处理吧,很简单的
:1 plink.exe -pw "ssh密码" -CNR 2222:localhost:22 root@1.2.3.4 -P 22 goto 1
这样就行
文章评论
楼主你好,没理解错的话这样的隧道的瓶颈也是公网服务器流量吧(隧道实际上还是转发),有没有啥方法能解决这个问题呢。