【问题标题】:How can I connect to Oracle Database 11g server through ssh tunnel chain (double tunnel, server in company network)?如何通过 ssh 隧道链(双隧道,公司网络中的服务器)连接到 Oracle Database 11g 服务器?
【发布时间】:2011-04-08 21:38:47
【问题描述】:

我可以通过 SSH 访问“公共”服务器,这也是公司网络的网关。网络中有另一台服务器,local Oracle 数据库服务器正在运行(没有来自该服务器外部的访问,只接受 localhost DB 连接)。当然,我还有另一个 SSH 访问此服务器的权限。

有没有办法从网络外部加入这个 Oracle Database 11g 服务器? 我在问是否有类似 ssh 隧道链的东西,以及我如何配置它。 例如,这对于 TOAD for Oracle(ORACLE 客户端)很有用。

编辑:这是图片

谢谢

【问题讨论】:

    标签: oracle ssh database-connection ssh-tunnel


    【解决方案1】:

    是的,这是可能的。例如。在 Linux 上,运行

    ssh -N -Llocalport:dbserver:dbport yourname@connectionserver
    

    在哪里

    • localport 是您机器上将被转发的端口(如果本地没有运行 oracle 实例,则可以是 1521)
    • dbserver 是数据库服务器的名称或 IP
    • dbport是数据库的端口(一般是1521)
    • yourname 是连接服务器上的登录名
    • connectionserver 是您拥有 ssh 访问权限的机器

    同样可以在 Windows 上使用 Plink(Putty 自带)完成:

    plink -N -L localport:dbserver:dbport yourname@connectionserver
    

    在两台机器(您的本地机器和您有权访问的服务器)上执行此操作以链接 ssh 隧道。示例:

    连接服务器(假设 Linux):

    ssh -N -L1521:dbserver:1521 dblogin@dbserver
    

    你的电脑:

    plink -N -L 1521:connectionserver:1521 connlogin@connectionserver
    

    tnsnames.ora 条目必须看起来像您正在运行本地数据库,例如

    prodoverssh =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = prod)
        )
      )
    

    【讨论】:

    • 我面临着非常相似的设置,但现在网关在“我这边”(在绿色圆圈中)。我还想通过隧道通信到 oracle 服务器。但是,我不能使用您的建议,因为我不是在管理“ORACLE SERVER”,而只是在原始问题中的网络架构上管理“GATEWAY”。我只能从“GATEWAY”与“ORACLE SERVER”机器(监听 1521)上的 Oracle 服务器通信,客户端安装在“GATEWAY”和“MY PC”上。有什么适合我的解决方案吗?
    • j_maly:如果数据库服务器接受来自网关的连接,那就更容易了。只需在您的 PC 上运行 plink -N -L 1521:dbserver:1521 gwuser@gateway
    • 感谢您的回复。我尝试了您的建议,但我得到 ORA-12170: TNS:Connect timeout occurred 错误。这就是我所做的:1)我在网关上设置了一个 ssh 服务器(并且我验证了我可以使用 putty 进行连接)2)我按照你的建议运行了命令(plink 要求在网关上输入密码,我输入密码,plink没有说别的——它应该输出某种“ok”消息吗?) 3)“dbserver”的 IP 只在“gateway”上被识别,而不是在我的本地 pc 上,我希望这不成问题。 4)我将 TNS 条目从网关复制到我的本地 PC(未更改)
    • 很可能是 TNS 条目。在您的本地 PC 上,它必须指向 localhost,因为这是隧道的入口!
    • 在这种链式隧道配置中,确保隧道中使用的地址是对应的,不要简单地属于同一台机器的不同接口。有关详细信息,请参阅superuser.com/a/346982/285945
    【解决方案2】:

    谢谢!

    我给ssh -N -LXXXX:server:YYYY login@server打了两次电话。

    首先,我打电话给

    ssh -L 9998:127.0.0.1:9997 login@gate.company.cz
    

    在我的电脑上。

    然后,在这台服务器上(在 SSH 会话期间),我调用了

    ssh -L 9997:localhost:1521 root@192.168.105.111
    

    其中 192.168.105.111 是运行 ORACLE 的服务器。

    所以我所做的是遵循重定向:

    1521 (COMPANY ORACLE SERVER) 
      -> 9997 (COMPANY GATEWAY SERVER)
         -> 9998 (LOCAL PC)
    

    所以我在本地 PC 的 9998 端口获得了 ORACLE 访问权限!

    【讨论】:

      【解决方案3】:

      您也可以添加在后台运行 ssh 命令的 -f 选项。

      【讨论】:

        【解决方案4】:

        我在 cmets 中遇到了与 @j_maly here 相同的问题,可以在“MY REMOTE PC”(linux) 中使用一条隧道连接到“GATEWAY”:

        ssh -L 1521:DATABASE_URL_OR_IP:1521 USER@GATEWAY
        

        但是在一次又一次地得到ORA-12170: TNS:Connect timeout occurred 之后。我已经这样做了:

        • 在 GATEWAY 中,将一些东西连接到可以工作的 oracle,在我的情况下,sqldeveloper(sqlplus 也应该可以工作)。假设sqldeveloper中的oracle工作url是database.company.ex

        • 在 GATEWAY 中运行 netstat -putan | grep 1521,问题如下:
          我发现该连接具有其他数据库 IP 和域,而不是之前已知和假定连接的 (database.company.ex)。

        • 所以你应该把netstat -putan | grep 1521结果中显示的ip或url放在“GATEWAY”中

          ssh -L 1521:DATABASE_URL_OR_IP_SHOWED_IN_NETSTAT:1521 USER@GATEWAY

        我不知道为什么会发生这种情况,但是我找到了几个 ip 连接到同一个数据库,并且我无法从其中一些连接,要解决问题,我们必须找到正确的 ip。

        值得一提的是,您还可以更改本地端口(在本例中为 11000)并运行此命令而不输出 (-fN)

        ssh -fN -L 11000:DATABASE:1521 USER@GATEWAY
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-12
          • 2020-09-30
          • 2012-06-21
          • 1970-01-01
          • 2017-01-01
          • 2020-07-05
          • 2019-08-01
          相关资源
          最近更新 更多