如何通过ssh隧道链(双隧道,公司网络中的服务器)连接到Oracle Database 11g服务器?

时间:2010-09-06 19:10:02

标签: oracle ssh database-connection ssh-tunnel

我可以通过SSH访问“公共”服务器,这也是公司网络的门户。网络中还有另一台服务器,其中本地 Oracle数据库服务器正在运行(此服务器外部无法访问,只接受localhost数据库连接)。当然,我有另一个SSH访问此服务器。

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

编辑:这是图片

alt text 感谢

4 个答案:

答案 0 :(得分:32)

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

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

,其中

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

使用Plink(随Putty附带)在Windows上也可以这样做:

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)
    )
  )

答案 1 :(得分:5)

谢谢!

我两次致电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!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我在注释中遇到了与@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工作网址为database.company.ex

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

  • 因此,您应该将netstat -putan | grep 1521结果中显示的ip或url放入“网关”

    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