【发布时间】:2021-11-22 11:39:48
【问题描述】:
我在成功连接 SSH 后尝试连接到 PostgreSQL 数据库时遇到问题。 我正在使用 Java + JSCH 库来帮助通过 SSH 隧道连接到 DB PostgreSQL。 请帮忙看看我的代码:
public static Connection connectDBAWS(String ipAddress, int port, String dbName, String username, String password, String tunnelHost, int tunnelPort, String tunnelUsername, String tunnelPassword) {
Connection connection;
Session session;
try {
//SSH TUNNEL connection
JSch jsch = new JSch();
session = jsch.getSession(tunnelUsername, tunnelHost, 22);
session.setPassword(tunnelPassword);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
System.out.println("Connected Successfully");
int assinged_port = session.setPortForwardingL(port, tunnelHost, tunnelPort);
System.out.println("assinged_port -> " + assinged_port);
System.out.println("Port Forwarded");
//DB connection
String dbUrl = "jdbc:postgresql://" + ipAddress + ":" + assinged_port + "/" + dbName;
Class.forName("org.postgresql.Driver");;
connection = DriverManager.getConnection(dbUrl, username, password);
System.out.println("connect DB success");
} catch (Exception e) {
connection = null;
e.printStackTrace();
}
return connection;
}
以下步骤抛出异常:
connection = DriverManager.getConnection(dbUrl, username, password);
结果如下:
Connected Successfully
assinged_port -> 5432
Port Forwarded
org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:292)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:454)
at org.postgresql.Driver.connect(Driver.java:256)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
...
我使用上面的值手动连接PostgreSQL,使用pgAdmin4,并成功连接: See configuration image here.
请有人提供一些修复我的代码的理想方法。
【问题讨论】:
-
这是完整的异常堆栈跟踪吗?您的代码中的
ipAddress是什么?
标签: java postgresql jdbc jsch ssh-tunnel