当前位置:   article > 正文

内网穿透系列——SSH反向隧道 (最简单的内网穿透方案)

反向隧道连接方法

转发sshd简单的内网穿透方案,在原文基础上添加如下说明:

1、外网服务器上需要开启GatewayPorts,命令:

  1. vim /etc/ssh/sshd_config
  2. GatewayPorts yes

2、使用root用户登录外网服务器,外网端口需要大于1024,参考:https://unix.stackexchange.com/questions/41451/how-can-i-set-up-a-remote-port-forward-on-port-80-to-my-localhost-with-the-help

原文如下:

内网穿透系列——SSH反向隧道 (最简单的内网穿透方案)

一.介绍

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

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

二.配置

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

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

 

1

2

3

4

5

6

7

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文件

举个最简单的栗子

 

1

ssh -fCNR 2222:localhost:22 root@1.2.3.4

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

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

 

1

yum install sshpass -y

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

 

1

sshpass -p "ssh密码" ssh -fCNR 2222:localhost:22 root@1.2.3.4

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

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

 

1

yum install autossh -y

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

 

1

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

 

1

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

 

1

plink.exe -pw "ssh密码" -CNR 2222:localhost:22 root@1.2.3.4 -P 22

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

 

1

2

3

4

5

:1

 

plink.exe -pw "ssh密码" -CNR 2222:localhost:22 root@1.2.3.4 -P 22

 

goto 1

 

这样就行

转载于:https://my.oschina.net/runescape/blog/1616031

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/952194
推荐阅读
相关标签
  

闽ICP备14008679号