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

时间:2016-02-11 10:41:58

标签: java jdbc intellij-idea ssh ssh-tunnel

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

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

成功创建隧道并执行命令:

psql db_name -h localhost -p 11100 db_username

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

目前,我有SSH隧道设置:

代理主机:服务器

港口:22

代理用户:用户名

对于我的常规标签:

host:localhost

port:28017

数据库:db_name

user:db_username

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

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

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

关于我做错的任何想法?

3 个答案:

答案 0 :(得分:1)

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

您的DriverManager上的URL似乎有误:尝试端口11100。

答案 1 :(得分:1)

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

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

enter image description here

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

enter image description here

答案 2 :(得分:0)

如果错误是Exhausted available authentication methods (1),请确保根据需要提供密码短语(2)。这很容易忘记,因为密码短语通常是由OS密钥管理器自动提供的,这使得该密钥似乎没有密钥。

(3)中的凭据用于Postgres。这些将不适用于对等身份验证。就我而言,我需要在pg_hba.conf中使用它:

hostnossl  all  rdahl  127.0.0.1/32  md5

(4)中的代理主机和用户用于ssh服务器,如从客户端看到的那样。

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

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

SSH credentials dialog Data sources general Data sources SSH