【问题标题】:Connect to database through two ssh tunnels in IntelliJ IDEA通过 IntelliJ IDEA 中的两个 ssh 隧道连接到数据库
【发布时间】:2019-07-20 19:54:25
【问题描述】:

我正在尝试在 IntelliJ IDEA Ultimate 中添加一个 postgresql 数据库作为数据源。
我已经通过一个 ssh 隧道处理过数据源。但是现在数据库服务器位于防火墙后面,防火墙只接受来自管理服务器的 ssh 连接。访问数据库服务器的唯一方法是通过管理服务器。

所以我(或 IntelliJ)必须通过 ssh 连接到该服务器,然后使用另一个用户通过 ssh 隧道连接到数据库服务器。

一切都清楚了吗? :-D

问题是,IntelliJ 只提供配置一个 ssh 隧道。但是在第一个隧道之后,我需要使用第二个,最终连接到数据库服务器...... 有什么想法吗?

提前致谢。

【问题讨论】:

    标签: database intellij-idea ssh datasource ssh-tunnel


    【解决方案1】:

    我会使用 OpenSSH 或任何类似工具创建一个 local port forward,通过管理服务器将 127.0.0.1:2222 转发到 firewall:22,然后使用 IntelliJ IDEA 隧道配置到 127.0.0.1:2222,就像使用单隧道一样.

    ssh -L 127.0.0.1:2222:firewall:22 <management server>

    您可以配置External Tool 来自动执行此过程。在 Windows 机器上,我使用 Bitvise SSH Client 创建隧道/端口转发并自动启动它们有很好的经验。

    【讨论】:

    • 谢谢。防火墙没有真正的地址(硬件),连接只是通过它。所以如果我为我的本地主机做一个端口转发到管理服务器,我只是在那里,而不是在数据库服务器上?在哪里或如何解决与数据库服务器本身的 ssh 连接?
    • 然后你只需通过管理服务器端口转发到数据库服务器并以本地主机身份连接到数据库,然后通过管理服务器和防火墙转发到数据库服务器。
    • 所以我必须在管理服务器上添加端口转发,对吧?
    • 是的,从你所描述的情况来看,这似乎是要走的路。
    【解决方案2】:

    ssh 支持您的场景开箱即用。诀窍是在您的~/.ssh/config 文件中为管理服务器创建两个条目,一个用于your-user,一个用于special-user。然后使用ProxyJump 将您的连接链接在一起。

    因此,首先为管理服务器和您从本地计算机连接的用户设置一个Host 部分:

    Host mgmt
        HostName management.server.com
        User your-user
        ...
        
    

    然后,为您将登录的管理服务器上的用户设置Host

    Host mgmt-special-user
        HostName management.server.com
        User special-user
    

    在同一主机上,添加一个指令来告诉ssh 创建一个到您的数据库的隧道:

        LocalForward <free-port-on-your-box> <db-ip-or-host>:<db-port>
    

    然后告诉ssh这个主机可以从第一台主机到达:

        ProxyJump mgmt
    

    您现在可以在本地计算机上ssh mgmt-special-userssh 会自动跳转到mgmt 主机,也会自动将隧道延伸到mgmt 并回到你的本地机器。

    ProxyJump (-J) 在 OpenSSH 7.3(2016 年发布)中添加。

    【讨论】:

      猜你喜欢
      • 2014-07-20
      • 2017-06-27
      • 1970-01-01
      • 2013-04-05
      • 2014-09-17
      • 2021-12-02
      • 1970-01-01
      • 2016-04-30
      • 2015-09-18
      相关资源
      最近更新 更多