gpt4 book ai didi

java - 使用 SSH 和 Java 连接到 postgresql

转载 作者:行者123 更新时间:2023-12-05 08:08:29 25 4
gpt4 key购买 nike

我正在尝试使用 JSch 在 java 中连接到 postgresql,但出现异常,我无法弄清楚问题出在哪里。我使用了本教程中提供的方法 https://www.journaldev.com/235/java-mysql-ssh-jsch-jdbc

代码及异常如下

public class MySqlConnOverSSH {
public static void main(String[] args) throws SQLException {

int lport = 5656;
String rhost = "192.168.1.1";
int rport = 5432;
String user = "abc";
String password = "abc";
String url = "jdbc:postgresql://localhost:" + lport + "/dbtwitter";
String driverName = "org.postgresql.Driver";
Connection conn = null;
Session session = null;
try {
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
JSch jsch = new JSch();
session = jsch.getSession(user, rhost, 22);
session.setPassword(password);
session.setConfig(config);
session.setConfig("PreferredAuthentications","publickey,keyboard-interactive,password");
session.connect();
System.out.println("Connected");
int assinged_port = session.setPortForwardingL(lport, rhost, rport);
System.out.println("localhost:" + assinged_port + " -> " + rhost + ":" + rport);
System.out.println("Port Forwarded");

//mysql database connectivity
Class.forName(driverName).newInstance();
conn = DriverManager.getConnection(url, user, password);
System.out.println("Database connection established");
System.out.println("DONE");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null && !conn.isClosed()) {
System.out.println("Closing Database Connection");
conn.close();
}
if (session != null && session.isConnected()) {
System.out.println("Closing SSH Connection");
session.disconnect();
}
}
}
}

我收到以下异常

 org.postgresql.util.PSQLException: The connection attempt failed.
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:136)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:66)
at org.postgresql.jdbc2.AbstractJdbc2Connection.<init>(AbstractJdbc2Connection.java:125)
at org.postgresql.jdbc3.AbstractJdbc3Connection.<init>(AbstractJdbc3Connection.java:30)
at org.postgresql.jdbc3g.Jdbc3gConnection.<init>(Jdbc3gConnection.java:24)
at org.postgresql.Driver.makeConnection(Driver.java:382)
at org.postgresql.Driver.connect(Driver.java:260)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at evidenceofvaccine.MySqlConnOverSSH.main(MySqlConnOverSSH.java:54)
Caused by: java.io.EOFException
at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:257)
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:253)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:94)
... 9 more

最佳答案

这可能无法具体解决问题,但我在迁移一些 Java 应用程序时遇到了与 SSH 隧道类似的问题。

SSH 给了我几个问题,我发现创建连接更容易,不是在代码本身中,而是使用控制台/终端创建一个桥接,像这样:

ssh -L localhost:MY_LOCAL_PORT:MY_LOCAL_URL:MY_DB_PORT -N -J MY_LOCAL_USER -i ~/MY_LOCATION/MY_FILE_NAME.pem VM_USER

后来,我使用我的应用程序 localhost:9991 作为我的新连接,然后它按预期工作。我避免使用过于复杂的代码修改我的 Java 应用程序,并且在我看来可以以某种方式重用。

关于java - 使用 SSH 和 Java 连接到 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48979756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com