致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器

Posted

技术标签:

【中文标题】致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器【英文标题】:FATAL: no pg_hba.conf entry for host "::1" trying to connect to postgresql server over ssh tunnel 【发布时间】: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_addressesnetstat -an | grep 5432 在数据库服务器上的输出等详细信息。 我无权访问服务器设置,因此我没有在服务器上设置任何内容,也无法访问配置文件。我通过添加 netstat -an | 的结果来编辑问题。 grep 5432 命令 我找到了解决方案,出于安全考虑,我删除了 neststat 输出。但是,这个问题与它无关。现在我来写解决方案 【参考方案1】:

发现问题: 在行中

dbstudSession.setPortForwardingL(6786,"localhost",5432);

我用该服务器的实际地址 (SERVER2_DOMAIN) 更改了“localhost”,一切正常。我仍然不明白问题可能是什么。

【讨论】:

一种解释是您没有配置 IPv6,但 localhost 仍解析为 ::1。那将是网络配置错误。

以上是关于致命:主机“::1”没有 pg_hba.conf 条目试图通过 ssh 隧道连接到 postgresql 服务器的主要内容,如果未能解决你的问题,请参考以下文章

org.postgresql.util.PSQLException:致命:主机没有 pg_hba.conf 条目

heroku Postgres - 续集:主机没有 pg_hba.conf 条目

PostgreSQL:pg_hba.conf中的MD5身份验证给我致命:用户“ postgres”的对等身份验证失败]] << [

Azure Postgres:主机“0.0.0.0”、用户“用户名”、数据库“订单”、SSL 上没有 pg_hba.conf 条目

Postgresql错误,“没有pg_hba.conf条目”

PostgreSQL的pg_hba.conf文件讲解