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

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

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

vim /etc/ssh/sshd_config


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值