Spring 引导,使用 oracle-ldap url 通过本地计算机上的 ssh 隧道

Spring Boot, using oracle-ldap url through ssh tunnel on local machine

有 3 台机器:
local -> some remote server -> oracle db server (via ldap)

我想设置到 oracle 数据库的数据源连接(在我的 spring 启动应用程序中)。
本地机器和带有 oracle db 的机器之间没有直接连接。 所以,我正在通过远程服务器使用 ssh 隧道:

ssh -L 127.0.0.1:8081:some.ldap.host:389 用户@remote.server.host

在 application.yml 文件中,我正在进一步使用 url:

spring:
  datasource:
    url: jdbc:oracle:thin:@ldap://127.0.0.1:8081//srvcnm,cn=OracleContext,dc=yy,dc=xx,dc=com 

当我的应用程序尝试获取数据库连接时,我收到以下错误:

Caused by: oracle.net.nt.TimeoutInterruptHandler$IOReadTimeoutException: Socket read timed out
    at oracle.net.nt.TimeoutSocketChannel.handleInterrupt(TimeoutSocketChannel.java:254)
    at oracle.net.nt.TimeoutSocketChannel.connect(TimeoutSocketChannel.java:103)
    at oracle.net.nt.TimeoutSocketChannel.<init>(TimeoutSocketChannel.java:77)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:192)
    ... 126 common frames omitted

每当我在远程服务器上部署应用程序并在 application.yml 中输入“直接”url 时,正在获取连接而没有任何超时,应用程序运行良好。

jdbc:oracle:thin:@ldap://some.ldap.host:389//srvcnm,cn=OracleContext,dc=yy,dc=xx,dc=com

有人知道怎么处理吗?如何从本地机器获取连接?

我可能会做这样的事情,我将创建文件调用 ~/.ssh/config 然后添加以下内容

Host remoteserver1
        User usermane
        Hostname ip or host name
        ForwardAgent yes
Host oracleserver
    User username
    Hostname some.ldap.host
    Port 22
   # ForwardAgent yes if you need to forward one more instance
    LocalForward 8081 some.ldap.host:389
    ProxyCommand ssh -q -W %h:%p remoteserver1

当我尝试从 remoteserver1 连接到 ssh oracleserver 时,它会连接到 hopper,然后代理 SSH 连接到那边的端口 22(即:Oracleserver 上的 SSH)。

现在要通过 ssh 连接,请执行以下操作 ssh oracleserver ,因为它将通过 remoteserver1 在您的机器和 oracleserver 之间建立 ssh 隧道。以及端口转发。

问题在于将源连接请求重定向到另一台具有 oracle db 本身的机器(在 ldap auth 之后)。 因此,请求的路径如下所示:

1.local -> 2.remote server -> 3.ldap server -> 4.oracle db server

1st4th 机器之间没有连接,因为隧道只在 1th[=23] 之间=]和第三一个。

所以,如果您遇到这个问题,您可以再添加一个 ssh 隧道(第一个隧道用于 ldap 服务器,第二个用于 oracle db)并使用 oracle 服务器的路由丰富您的“etc/hosts”。

就我而言,问题在于访问限制。 oracle 服务器以某种方式过滤套接字并授予对某些机器的访问权限。