V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a33291
V2EX  ›  程序员

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

  •  
  •   a33291 · 171 天前 · 840 次点击
    这是一个创建于 171 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    先看拓扑图(来自 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 连接这样方便调试,并不会暴露到不安全环境,而且用完则关

    再次感谢大家

    10 条回复    2024-06-05 09:59:30 +08:00
    a33291
        1
    a33291  
    OP
       171 天前
    刚测试了一下把 web 上启动的 xshell 临时会话另存为标准会话后,解密了会话中的用户名密码
    在会话不断开的情况下,使用其他 ssh 客户端使用账号密码去连接堡垒机,会发现无法连接,提示密码错误
    换句话说,这个密码应该是一次性密码,用一次就失效

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

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

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

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

    https://github.com/Orlion/hersql

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

    此外这应该包含一个隐含的要求就是过堡垒机能暴露出一个 http 端口,目前环境下只给我们开了一个 web 端口(页面访问),此外不再对外暴露任何端口,所以我猜测也比较难
    Orlion
        10
    Orlion  
       169 天前   ❤️ 1
    @a33291 所有客户端都可以连上。确实需要内网有一台机器能暴露 http 端口,我们是在内网有一台机器,被 nginx 监听,我用 nginx 转发请求到内网的 hersql transport 服务上。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:57 · PVG 22:57 · LAX 06:57 · JFK 09:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.