请教,过堡垒机访问内部服务如何配置 ssh 隧道?

167 天前
 a33291

之前请教过一次,但是实验之后还是不行

先看拓扑图(来自 MX,测试环境) https://imgur.com/a/iKd2LGb

现在已知所有内网服务都必须过堡垒机 a(192.168.192.130)访问,然后在内部服务器 b(192.168.192.129)上有一个 mysql 服务监听端口为 3306 现在可以通过堡垒机 web 页面直接启动一个 xshell,无需输入任何用户名或密码就会建立一个到 b 服务器的 ssh 连接 现在我尝试利用 ssh 隧道功能,将服务器 b 上的 3306 端口转发到 xshell 所在客户端机器(此处端口号为 33306) https://imgur.com/473D7Km

然后我用 navicat 连接客户端机器的 33306,无法链接,并且如果直接 telnet 这个端口会被立即关闭

当前已做如下尝试 1.由于我已知测试环境堡垒机 a 的 ssh 账户,所以如果我先通过 xshell 新建一个普通的 ssh 会话并连接到 a,然后添加一个隧道此时是可以正常连接 2.如果通过堡垒机的网页建立的 xshell 会话,新建同样的隧道就无法连接

由于堡垒机连接时每次的用户名密码都是随机且不可见的,所以在尝试使用 MX 中的隧道功能时,ssh server 处的用户名密码无法填写

现在的疑问就是,这种情况是有可能打通的吗?

补充一下场景 在服务器 b 上的数据库有时候想要去定位一下问题,在 cli 内直接执行 sql 看着太累了,所以想要把 mysql 服务暴露在本地通过 navicat 连接这样方便调试,并不会暴露到不安全环境,而且用完则关

再次感谢大家

831 次点击
所在节点    程序员
10 条回复
a33291
167 天前
刚测试了一下把 web 上启动的 xshell 临时会话另存为标准会话后,解密了会话中的用户名密码
在会话不断开的情况下,使用其他 ssh 客户端使用账号密码去连接堡垒机,会发现无法连接,提示密码错误
换句话说,这个密码应该是一次性密码,用一次就失效

不是很确定 ssh 隧道是否是单独启动独立的 ssh 会话去建立隧道,如果是的话那肯定就不行,因为密码已经失效了
F7TsdQL45E0jmoiG
166 天前
给 ssh 的用户加密钥登录,再建 tunnel 时用密钥验证
a33291
166 天前
@morenacl 感谢建议,不得行,我对堡垒机没有控制权,别人只给了这种方式😁
Volekingsg
166 天前
> 不是很确定 ssh 隧道是否是单独启动独立的 ssh 会话去建立隧道
可以不是,另外 ssh 连接也可以复用

我都是用命令行,不清楚 MX 指什么,本质上还是看是否限制 ssh 连接到堡垒机,如果可以就可以
a33291
166 天前
@Volekingsg 感谢回复,MX 指 MobaXterm

现在堡垒机启动的时候都是直接 web 页面唤起 xshell 或者是 MobaXterm,然后如果唤起的是 xshell,则可以在 "转移规则"处右键新建一个隧道,但是实际测试发现看似建立成功但是无法正常工作
而如果唤起的是 MobaXterm,也有一个新建隧道的能力(也就是图 1),但是他要求填这个堡垒机或者目标机器的密码,实际情况是我无法知道堡垒机或者目标机器的 ssh 用户名和密码
现在也无法控制堡垒机给出其他连接方案,比如楼上说的开放 token 连接,他 web 唤起的程序用到的用户名密码都是随机的,而且一旦唤起的程序连接之后,在用相同用户名密码就无法建立独立的 ssh 连接(xshell 中的"赋值渠道"是可以,但是隧道仍然不行)

如果能通过稳定的用户名密码连接到远程 ssh,这个情况我测试过,隧道的确正常
yiranfxh
166 天前
堡垒机要对 ssh 进行代理审计,一般不支持这种隧道形式。他本地调起 xshell 就是将一次一密传给 xshell ,你可以在本地动点手脚,让他启动你自己的脚本,用他给的一次一密来试试开启 ssh 隧道。但我猜测应该是不行的。你用哪家的堡垒机?
Orlion
166 天前
跟我司开发环境差不多,专门写了个用 http 转发 mysql 包的工具方便从本地连接测试环境的 mysql 。大概原理就是在本机伪装出一个“假 mysql server”,本机 mysql client 连接到本地的假 mysql server ,然后这个假 mysql server 将数据包通过 http 转发到测试环境的一台机器上,这台机器将数据包转发给真正的 mysql server 。

https://github.com/Orlion/hersql

不知道能否解决你的问题
a33291
166 天前
@yiranfxh 感谢指点
我开始也想过是不是可以对 xshell 或者 mx 本身动手脚,这样当从 web 唤起的时候就执行额外的命令,在首次连接时即能建立一个隧道,但是尚未验证过
生产环境是奇安信的堡垒机,我自己搭建用于测试和验证的开源的 jumpserver
a33291
166 天前
@Orlion 感谢
通过 http 转发 mysql 协议的话,navicat 这种客户端能连上吗?

此外这应该包含一个隐含的要求就是过堡垒机能暴露出一个 http 端口,目前环境下只给我们开了一个 web 端口(页面访问),此外不再对外暴露任何端口,所以我猜测也比较难
Orlion
165 天前
@a33291 所有客户端都可以连上。确实需要内网有一台机器能暴露 http 端口,我们是在内网有一台机器,被 nginx 监听,我用 nginx 转发请求到内网的 hersql transport 服务上。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1046394

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX