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

如何通过ssh隧道链(双隧道,公司网络中的服务器)连接到Oracle Database 11g服务器?,oracle,ssh,database-connection,ssh-tunnel,Oracle,Ssh,Database Connection,Ssh Tunnel,我可以通过SSH访问“公共”服务器,该服务器也是公司网络的网关。网络中还有另一台服务器,其中运行的是本地Oracle数据库服务器(此服务器外部没有访问权限,只接受本地主机数据库连接)。当然,我还有另一个SSH访问该服务器的权限 是否有任何方法可以从网络外部加入此Oracle Database 11g服务器? 我在问是否有类似ssh隧道链的东西,以及如何配置它。 例如,对于TOAD for Oracle(Oracle客户端),这是非常有用的 编辑:这是图片 谢谢是的,这是可能的。例如,在Linu

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

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

编辑:这是图片


谢谢

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

ssh -N -Llocalport:dbserver:dbport yourname@connectionserver
在哪里

  • localport是计算机上将转发的端口(如果没有运行oracle的本地实例,则可以是1521)
  • dbserver是数据库服务器的名称或IP
  • dbport是数据库的端口(通常为1521)
  • yourname是connectionserver上的登录名
  • connectionserver是您具有ssh访问权限的计算机
使用Plink(带有油灰)在窗户上也可以做到这一点:

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

连接服务器(假定为Linux):

您的电脑:

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

我调用了ssh-N-lxxx:server:YYYYlogin@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访问权限

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

我在评论中遇到了与@j_maly相同的问题,在“我的远程PC”(linux)中,只需使用一个隧道就可以连接到“网关”:

但是在获得
ORA-12170:TNS:Connect超时后,一次又一次地发生了
。我已经做到了:

  • 在GATEWAY中,连接一些对oracle有效的东西,在我的例子中是sqldeveloper(sqlplus也应该有效)。让我们猜测sqldeveloper中的oracle工作url是
    database.company.ex

  • 在GATEWAY run
    netstat-putan | grep 1521
    中,问题是:
    我发现该连接具有其他数据库ip和域,而不是以前已知的和假定已连接的(
    database.company.ex

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

    ssh-L 1521:DATABASE\u URL\u或\u IP\u在\u NETSTAT:1521中显示\uUSER@GATEWAY

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

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


我面临着非常相似的设置,但现在网关在“我这边”(在绿色圆圈中)。我还想通过隧道与oracle server进行通信。但是,我不能使用您的建议,因为我不是在管理“ORACLE SERVER”,而是在原始问题中网络模式上的“网关”。我只能通过“网关”与“Oracle server”计算机上的Oracle server(1521上的侦听)通信,客户端同时安装在“网关”和“我的电脑”上。有什么解决方案吗?j_maly:如果DB服务器接受来自网关的连接,那就更容易了。只需运行
plink-N-l1521:dbserver:1521gwuser@gateway
来自您的电脑。感谢您的回复。我尝试了你的建议,但我得到ORA-12170:TNS:Connect timeout发生错误。这就是我所做的:1)我在网关上设置了一个ssh服务器(并且我验证了我可以使用putty进行连接)2)我按照您的建议运行了命令(plink要求在网关上输入密码,我输入密码,plink没有说任何其他内容——它是否应该输出某种“ok”消息?)3)只有在“网关”上才能识别“dbserver”的IP,不是在我本地的电脑上,我希望这不会是一个问题。4) 我将TNS条目从gateway复制到本地PC(没有更改),很可能是TNS条目。在本地PC上,它必须指向localhost,因为这是隧道的入口!在这种链式隧道配置中,确保隧道中使用的地址对应,而不仅仅是属于同一台机器的不同接口。有关更多详细信息,请参阅。
ssh -L 9997:localhost:1521 root@192.168.105.111
1521 (COMPANY ORACLE SERVER) 
  -> 9997 (COMPANY GATEWAY SERVER)
     -> 9998 (LOCAL PC)
ssh -L 1521:DATABASE_URL_OR_IP:1521 USER@GATEWAY
ssh -fN -L 11000:DATABASE:1521 USER@GATEWAY