[英]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.