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

Java 如何使用IntelliJ和JDBC通过SSH隧道连接到数据库?,java,jdbc,intellij-idea,ssh,ssh-tunnel,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 成功创建隧道,并执行以下命令: ssh username@server -L 11100:ct1:28017 -N psql db_name -h localhost -p 11100 db_username 连接到数据库

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

ssh username@server -L 11100:ct1:28017 -N
psql db_name -h localhost -p 11100 db_username
成功创建隧道,并执行以下命令:

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_用户名

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

Connection connection = DriverManager.getConnection("jdbc:postgresql://localhost:28017/db_name", user, password);
URL参数是IntelliJ生成的参数。然而,这给了我一个错误“连接到本地主机:28017被拒绝”


您知道我做错了什么吗?

您是否从像SSHJ()这样的java客户机连接到SSH服务器


DriverManager上的URL似乎不正确:请尝试端口11100。

如果有人正在寻找不带外部库的简单解决方案,请通过intellij执行以下设置

  • 打开数据库视图(视图->工具窗口->数据库)
  • 添加新数据源(右键单击,新建->数据源-> Postgres/Mysql)在主机中,使用127.0.0.1(有时不是本地主机) 本地主机未正确解析)。
  • 按照远程主机上的配置填写其余字段
  • 现在单击SSH/SSL选项卡并配置SSL隧道:


    如果错误
    用尽了可用的身份验证方法
    (1),请确保在需要时提供密码短语(2)。这很容易忘记,因为密码短语通常由OS keyring manager自动提供,这使得密钥似乎没有密码

    (3)中的凭证适用于博士后。这些将不适用于对等身份验证。在我的例子中,我在
    pg_hba.conf
    中需要这个:

    hostnossl  all  rdahl  127.0.0.1/32  md5
    
    (4)中的代理主机和用户用于从客户端看到的ssh服务器

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

    两个对话框中的
    测试连接
    按钮都会触发相同的测试


    端口
    28017
    打开了吗?@Andremoniy在服务器上,是的,它打开了。看起来您在本地使用了SSH隧道的端口11100,这是您需要在连接字符串中指定的端口号(就像您在
    psql db_name-h localhost-p 11100 db_username
    中所做的那样)。这似乎起到了作用。我仍然使用Jsch库及其端口转发。无法应用SSH设置:找不到主机和端口。