ssh端口转发困惑的解决

困惑之处

一直以来我都有这么一个困惑,外网机器不做一个本地4444和5555的端口转发的话,直接连接4444是连不进去的。
凭啥我自己打好的通道,不让我往4444端口的洞里钻?非得再多凿个4444和5555的通道,让我钻5555的口子?

答案

/etc/ssh/sshd_config配置文件里有一个选项,叫做GatewayPorts,默认是关闭的
这是ssh出于安全考虑做的设置,如果不开启这个东西,那么,通过ssh做的端口转发,都只允许来自本地的连接
举个例子:
我通过ssh把内网A机器22转发到阿里云服务器的9999端口上,我此时用我另一部PC(内网B机器)去连接阿里云的4444端口是会失败的【ssh -p 9999 A机器用户名@阿里云服务器的IP地址】,想连接到内网A机器的22,只能先登录阿里云服务器,然后在阿里云服务器里【ssh -p 9999 A机器用户名@127.0.0.1】才能连到内网A机器的22
看图更容易懂:

其中,注意看这里9999的端口监听状态,会发现,监听9999端口的IP是127.0.0.1,换句话说——只允许本地连接:

去/etc/ssh/sshd_config里修改GatewayProts为yes,然后service sshd restart

具体的一些细节

SSH 会自动加密和解密所有SSH 客户端与服务端之间的网络数据,除此之外SSH 还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务,这一功能也称为“SSH隧道”。
GatewayProts :
yes 默认允许0.0.0.0接入,不需要客户端指定(这时候就算指定了127.0.0.1,最后绑定的还是0.0.0.0)

no 默认只允许127.0.0.1接入,客户端指不指定无影响(如果你看了别的文章可能有人提到-g参数来指定开启GatewayProts,但我试了,不修改sshd的配置文件,这个参数无作用)

clientspecified 客户端指定绑定到哪个地址,如果指定0.0.0.0就允许任意IP远程接入(不指定默认127.0.0.1,而且不需要加-g参数就能指定具体IP)

我在做这套流程时踩过的最大的坑

我最开始是用阿里云的服务器做实验的,但是一直不成功,各种查资料感觉没啥问题,后来换用自己的云服务器才成功的
估计是阿里云的服务器又防火墙之类的策略,导致操作一直失败

posted @ 2020-09-18 10:33  Credink  阅读(571)  评论(0)    收藏  举报