如何使用 IntelliJ 和 JDBC 建立 SSH 隧道并连接到数据库?

Posted

技术标签:

【中文标题】如何使用 IntelliJ 和 JDBC 建立 SSH 隧道并连接到数据库?【英文标题】:How to SSH tunnel and connect to a database using IntelliJ and JDBC? 【发布时间】:2016-05-22 02:16:23 【问题描述】:

我在使用 IntelliJ 和 JDBC 连接到托管在服务器上的数据库时遇到问题。用命令行,命令:

ssh username@server -L 11100:ct1:28017 -N

创建隧道成功,命令:

psql db_name -h localhost -p 11100 db_username

很好地连接到数据库并允许我使用它。如何将其正确转换为 IntelliJ 数据源和 SSH 隧道工具?

目前,对于我的 SSH 隧道设置:

代理主机:服务器

端口:22

代理用户:用户名

对于我有的常规标签:

主机:本地主机

端口:28017

数据库:db_name

用户:db_username

测试连接后连接成功返回。在我的程序中,我有:

Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:28017/db_name", user, password);

URL 参数是 IntelliJ 生成的参数。然而,这给了我一个错误“连接到 localhost:28017 被拒绝。”

关于我做错了什么有什么想法吗?

【问题讨论】:

端口28017打开了吗? @Andremoniy 在服务器上,是的,它是打开的。 看起来您在本地使用端口 11100 进行 SSH 隧道,这是您需要在连接字符串中指定的端口号(就像您在 psql db_name -h localhost -p 11100 db_username 中所做的一样)。 【参考方案1】:

如果有人正在寻找没有外部库的简单解决方案,这是我通过 intellij 进行的设置。

    打开数据库视图(视图 -> 工具窗口 -> 数据库)。 添加新的数据源(右键,新建->数据源-> Postgres/mysql)。 在主机中,使用 127.0.0.1(不是 localhost,有时 localhost 未正确解析)。 填写远程主机上配置的其余字段。

现在点击 SSH/SSL 选项卡并配置 ssl 隧道:

【讨论】:

【参考方案2】:

您是否从 SSHJ (https://github.com/hierynomus/sshj) 等 java 客户端连接到 SSH 服务器?

您的 DriverManager 上的 URL 似乎错误:尝试使用端口 11100。

【讨论】:

这似乎奏效了。我最终还是使用了 Jsch 库及其端口转发。【参考方案3】:

如果错误是Exhausted available authentication methods❶,请确保在需要时提供密码❷。这很容易忘记,因为密码短语通常由操作系统密钥环管理器自动提供,这使得密钥看起来好像没有密码。

❸ 中的凭据用于 Postgres。这些不适用于对等身份验证。就我而言,我在pg_hba.conf 中需要这个:

hostnossl  all  rdahl  127.0.0.1/32  md5

❹中的代理主机和用户是从客户端看到的ssh服务器。

JetBrains 的文档很奇怪,让我怀疑这是否只是使用现有的 SSH 隧道,或者它是否创建了一个。它创建一个。

两个对话框中的Test Connection 按钮都触发相同的测试。

【讨论】:

我已成功调整数据库,但不确定如何在数据源中提供此 URL。我正在运行一个 Spring Boot 应用程序,需要在 application.yaml 中提供数据源 URL,有什么线索我们该怎么做? 对于使用默认端口通过隧道连接到 localhost 的 Postgres,我的猜测是 jdbc:postgresql:database。其中database 是您的数据库的名称。更多信息:jdbc.postgresql.org/documentation/80/connect.html.

以上是关于如何使用 IntelliJ 和 JDBC 建立 SSH 隧道并连接到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA载入JDBC驱动

谁能解释如何在 Intellij Idea 中建立一个 hybris 项目?

如何使用 IP 地址(通过 InetAddress)通过 JDBC 与 MySQL 建立连接?

intellij连接MySQL数据库

Intellij idea 导入 jdbc

JAVA JDBC 数据库连接池