繁体   English   中英

使用 ssh 隧道从 Java jdbc 连接到 aws 远程 Postgres,面临连接超时,而 JsCH session.connect() 运行成功

[英]Connect to aws remote Postgres from Java jdbc with ssh tunnel, Facing connection timeout, while JsCH session.connect() ran successful

`嗨,伙计们,

我在 DriverManager.getConnection() 连接到 aws 远程 postgresql 数据库时遇到连接超时。 它也涉及 SSH,我在通过 java 连接时遇到问题,因为 DBeaver 能够成功连接。

在期望连接成功的同时尝试了以下代码。

String url = "jdbc:postgresql://###remoteHost";
        String userName = "userName";
        String password = "pwd";
        Properties props = new Properties();
        props.put("StrictHostKeyChecking", "no");
      
        
        Connection conn = null;
        try {
            String jumpserverHost = "sshHost";
            String jumpserverUsername = "sshUsername";
            JSch jsch = new JSch();
            jsch.addIdentity("FileContainingKey");
            

            Session session = jsch.getSession(jumpserverUsername, jumpserverHost, 22);
            session.setConfig(props);
            session.connect();

            // Forward randomly chosen local port through the SSH channel to database host/port
            int forwardedPort = session.setPortForwardingL(8080, "remoteHost", 5432);
            System.out.println(forwardedPort);// 8080 
            Class.forName("org.postgresql.Driver");
            conn = DriverManager.getConnection(url+":"+forwardedPort+"/ulp?ssl=true", userName, password);
            
            System.out.println("Connected to the PostgreSQL server successfully.");
            conn.setAutoCommit(false);
        } catch (Exception e) {
          }

但是出现如下连接超时错误:-

org.postgresql.util.PSQLException: The connection attempt failed.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:315)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:225)
    at org.postgresql.Driver.makeConnection(Driver.java:465)
    at org.postgresql.Driver.connect(Driver.java:264)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at application.DBTesting.connectionSetup(DBTesting.java:193)
    at util.MainFrameClass.main(MainFrameClass.java:25)
Caused by: java.net.SocketTimeoutException: Connect timed out
    at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:546)
    at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
    at java.base/java.net.Socket.connect(Socket.java:645)
    at org.postgresql.core.PGStream.createSocket(PGStream.java:231)
    at org.postgresql.core.PGStream.<init>(PGStream.java:95)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:98)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:213)
    ... 8 more

`

看起来像 url = "jdbc:postgresql://###remoteHost"; - 应该简单地指向 localhost 而不是 remoteHost - jdbc:postgresql://localhost:8080/ulp?ssl=true – Vicctor 这对我有用......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM