使用反向ssh从外网访问内网主机的方法详解

本文介绍了一种通过反向SSH隧道实现从外网访问内网服务器的方法,适用于没有校园网网关操作权限的情况。利用一台有固定外网IP的服务器作为跳板,内网主机主动发起连接,建立稳定的反向SSH通道,实现远程访问内网资源。
摘要由CSDN通过智能技术生成

前言

最近遇到一个问题,就是过几天我需要离开学校,而且到时候仍然想登陆校园网里的一台服务器进行工作;但是我又没有校园网网关的操作权限,不能做端口映射,也不能搞到校园网内部主机的外网ip,而且学校自己提供的vpn又根本没法用。研究了半天,总算找到了一个比较不错的利用反向ssh(reverse ssh tunnel)进行内网登陆的解决方案。

工作原理

之所以很多转发的方法无法应用在这里,就是因为内网主机对外网其实是不可见的,也就是说外部主机不能用一般的方法访问到内部主机。那么我们就想了,能不能用内网主机找外网主机,找到之后再把这条内网主机登陆外网的信道转换成外网主机登陆内网的信道呢?辛运的是,这个方法的确是可行的,这也就是所谓反向ssh最通俗的理解,这就像寄信一样,”虽然我不知道你的地址,但是你知道我的地址,那么你就先给我写封信,告诉我你的地址,然后我不就可以回信给你了么?“。

操作步骤

由于我们自己使用的电脑未必有外网ip,因此我们需要一个有固定外网ip的服务器(随便搞个腾讯云阿里云的小机子就行),然后用这台服务器与内网的机子进行通信,我们到时候要先登陆自己的服务器,然后再利用这个服务器去访问内网的主机。

1、准备好有固定ip的服务器A,以及待访问的内网机器B。两者都开着sshd服务,端口号默认都是22。顺便做好ssh免密码登陆。

2、内网主机B主动连接服务器A,执行以下命令:

?

1

$ ssh -NfR 1111:localhost:22 username@servername -p 22

这条命令的意思是在后台执行(-f),不实际连接而是做port forwarding(-N),做反向ssh(-R),将远程服务器的1111端口映射成连接本机(B)与该服务器的反向ssh的端口。

附:这里有必要加强一下记忆,这个端口号一不小心就容易搞混。。man文档中的参数命令是这样的:

?

1

-R [bind_address:]port:host:hostport

bind_address以及其后面的port是指远程主机的ip以及端口,host以及其后的hostport是指本机的ip和端口。由于ssh命令本身需要远程主机的ip(上上条命令中的servername),因此这个bind_address原则上是可以省略的。

执行完这条命令,我们可以在服务器A上看到他的1111端口已经开始监听:

?

1

2

$ ss -ant |grep 1111

LISTEN  0  128    127.0.0.1:1111      *:*

3、在上面的操作中,这个1111端口就已经映射成了内网主机B的22端口了,现在我们只要ssh到自己的这个端口就行了。在服务器A中执行:

?

1

$ ssh username@localhost -p 1111

#回车后会有个填写内网主机B的询问

注意:username是内网主机B的用户名,虽然ip是localhost

这样就成功的登陆了内网的主机了。

功能优化

上面的做法其实有一个问题,就是反向ssh可能会不稳定,主机B对服务器A的端口映射可能会断掉,那么这时候就需要主机B重新链接,而显然远在外地的我无法登陆B。。。这其实有一个非常简单的解决方案,就是用autossh替代步骤2中的ssh:

?

1

$ autossh -M 2222 -NfR 1111:localhost:22 username@servername -p 22

后面的参数跟ssh都一样,只是多了一个-M参数,这个参数的意思就是用本机的2222端口来监听ssh,每当他断了就重新把他连起来。。。不过man文档中也说了,这个端口又叫echo port,他其实是有一对端口的形式出现,第二个端口就是这个端口号加一。因此我们要保证这个端口号和这个端口号加一的端口号不被占用。

原文链接:https://blog.mythsman.com/2017/01/14/1/

有笔记本功能但自动记录的桌面程序&信息找回五金激光打标机、塑胶激光打码机,玻璃紫外激光喷码机、塑胶按键激光镭雕机、灯具激光打码机、金属激光打标机,氧化铝激光打黑、光纤激光焊接机、手持式激光焊接机、全自动连续激光焊接机、光纤激光切割机、金属激光切割机、非金属激光切割机icon-default.png?t=N7T8https://pan.baidu.com/s/1s9d69-wNJPh5tEOMAZsJvg?pwd=yjg4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值