【发布时间】:2018-11-09 12:58:54
【问题描述】:
我正在尝试通过 SSH 隧道使用 java 连接到 postgresql 服务器。 我没有对 postgresql 服务器的管理员访问权限,因此无法修改任何设置。
这是我的代码:
public SSHConnection() {
JSch jsch = new JSch();
//First ssh connection to the first domain (SERVER1_DOMAIN)
serverSession = jsch.getSession(USERNAME, SERVER1_DOMAIN, 22);
serverSession.setPassword(PASSWORD);
localUserInfo lui=new localUserInfo();
serverSession.setUserInfo(lui);
serverSession.setConfig(STRICT_HOST_KEY_CHECKING, NO);
System.out.println("Establishing Connection with "+SERVER1_DOMAIN);
//Port forwarding to the second domain (SERVER2_DOMAIN)
serverSession.setPortForwardingL(2233, SERVER2_DOMAIN, 22);
serverSession.connect();
System.out.println("Connection established with "+SERVER1_DOMAIN);
serverSession.openChannel("direct-tcpip");
//Creating second ssh session
dbstudSession = jsch.getSession(USERNAME, "localhost", 2233);
dbstudSession.setPassword(PASSWORD);
dbstudSession.setUserInfo(lui);
dbstudSession.setConfig("StrictHostKeyChecking", "no");
dbstudSession.connect(); // now we're connected to the secondary system
//Creating port forwarding from my system (6786) to postgresql port of SERVER2_DOMAIN over the ssh connection created above
dbstudSession.setPortForwardingL(6786,"localhost",5432);
System.out.println("Connection established with "+SERVER2_DOMAIN);
Class.forName("org.postgresql.Driver");
Connection connection = null;
//Trying to connect to the psql database
connection = DriverManager.getConnection("jdbc:postgresql://localhost:6786/databasename",USERNAME,PASSWORD);
connection.close();
}
当我运行它时,它正确地创建了两个 ssh 连接,但是我从 postgre 中得到了这个错误:
致命:主机“::1”、用户“taschinfed”、数据库“taschinfed”没有 pg_hba.conf 条目,SSL 关闭 在 org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473) 在 org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205) 在 org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) 在 org.postgresql.jdbc.PgConnection.(PgConnection.java:195) 在 org.postgresql.Driver.makeConnection(Driver.java:452) 在 org.postgresql.Driver.connect(Driver.java:254) 在 java.sql.DriverManager.getConnection(DriverManager.java:664) 在 java.sql.DriverManager.getConnection(DriverManager.java:247) 在 SSHConnection.connect(SSHConnection.java:65) 在 SSHConnection.(SSHConnection.java:54) 在 Main.main(Main.java:10)
我不知道该怎么办
编辑:我可以通过 windows power shell 轻松访问数据库,方法是创建到第一个域的 ssh 连接,以及从第一个域到第二个域的另一个 ssh 连接,然后使用 psql命令。这意味着ssh连接没有问题,实际上我可以从我的java代码访问服务器,但我不明白那个错误消息是什么意思。
【问题讨论】:
-
您忘记添加诸如如何设置 ssh 隧道、如何在 PostgreSQL 中配置
listen_addresses、netstat -an | grep 5432在数据库服务器上的输出等详细信息。 -
我无权访问服务器设置,因此我没有在服务器上设置任何内容,也无法访问配置文件。我通过添加 netstat -an | 的结果来编辑问题。 grep 5432 命令
-
我找到了解决方案,出于安全考虑,我删除了 neststat 输出。但是,这个问题与它无关。现在我来写解决方案
标签: java postgresql ssh-tunnel