簡體   English   中英

如何使用 IntelliJ 和 JDBC 建立 SSH 隧道並連接到數據庫?

[英]How to SSH tunnel and connect to a database using IntelliJ and JDBC?

我在使用 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 被拒絕”。

關於我做錯了什么的任何想法?

如果有人正在尋找沒有外部庫的簡單解決方案,這是我通過 intellij 的設置。

  1. 打開數據庫視圖(視圖 -> 工具窗口 -> 數據庫)。
  2. 添加新的數據源(右鍵單擊,新建 -> 數據源 -> Postgres/Mysql)。 在主機中,使用 127.0.0.1(不是本地主機,有時本地主機沒有正確解析)。
  3. 填寫遠程主機上配置的其余字段。

在此處輸入圖片說明

現在單擊 SSH/SSL 選項卡並配置 ssl 隧道:

在此處輸入圖片說明

您是否從像 SSHJ ( https://github.com/hierynomus/sshj ) 這樣的 Java 客戶端連接到 SSH 服務器?

DriverManager 上的 URL 似乎有誤:請嘗試使用端口 11100。

如果錯誤是Exhausted available authentication methods (1) ,請確保在需要時提供密碼短語(2) 這很容易忘記,因為密碼短語通常由操作系統密鑰環管理器自動提供,這使得密鑰似乎沒有。

(3)中的憑據用於 Postgres。 這些不適用於對等身份驗證。 就我而言,我在pg_hba.conf需要這個:

hostnossl  all  rdahl  127.0.0.1/32  md5

(4)中的代理主機和用戶是從客戶端看到的 ssh 服務器。

JetBrains 的文檔很奇怪,讓我懷疑這是否只是使用現有的 SSH 隧道,或者它是否創建了一個。 創造了一個。

兩個對話框中的Test Connection按鈕都觸發相同的測試。

SSH 憑據對話框 數據來源一般 數據源 SSH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM