AlmaLinux上のDBへのSSHトンネル接続がDataGripで失敗する問題の解決方法

AlmaLinux&DataGrip DBへのSSH tunnel接続でエラーになる原因 NEWS
この記事は約3分で読めます。

はじめに

クラウドVPSのAlmaLinux9サーバにPostgreSQL14を構築したのですが、なぜか自宅PCのDataGripからSSHトンネルの接続に失敗してしまいます。

問題は解決できましたので、自分用の備忘録として残したいと思います。

事象について

事象としては以下のようにDataGripの「Test Connection」をクリックすると、SSH tunnel creation failed: Connection refused.となってしまい、DBへの接続に失敗します。

なお、あらかじめSSHトンネル用の設定(「SSH Configurations」画面での設定)は済んでいて、「Test Connection」も成功しています。

であるにも関わらず、なぜかこの画面ではSSHトンネルに失敗しています。

DataGrip側の設定について

DataGrip側の設定としては、「Data Sources and Drivers」画面の「SSH/SSL」タブの設定は以下になります。

あらかじめSSH configurationの設定は完了(「Test Connection」も成功)していますので、上図ではその設定を指定しているだけです。

また、下図の「SSH Configurations」の設定では、「Test Connection」が成功しています。

DataGripからのSSH接続が成功しているので、「SSH/SSL」タブの「Test Connection」も成功しそうですが、なぜか失敗している状況です。

AlmaLinuxサーバ側の設定について

FWの設定

FWの設定については、SSH接続するポート(xxxx22 port)はもちろん開けています。

また、PostgreSQLの5432ポートは閉じていましたが、一時的に開けてみても接続に失敗しました。

pg_hba.confの設定

pg_hba.confには、SSH接続するユーザ名を指定した「local」の行と、「hostssl」の行(「cert」指定)を記載しているので問題ないと思います。

実際、今回の事象が解決したときは「hostssl」の行は不要で、「local」の行だけでOKでした。

原因について

Linuxサーバのログを確認しながらDataGrip側で色々試したところ、Host:欄の記載が間違っていたのが原因でした。

解決方法について

「Host:」欄はサーバのグローバルIPアドレスを指定していましたが、これをlocalhostに変更してあげると接続できました

イメージとしては、自宅PC(DataGrip)からクラウドのサーバにSSH接続が成功した後は、サーバ側にログインできているのだから、わざわざグローバルIPアドレスを指定するのではなく、localhostの5432portを指定し接続すれば良いだけ、ということだと思います。

サーバへのSSH接続完了後にグローバルIPアドレス指定で5432portに接続しようとすると、一回外(インターネット)に出てから5432portに繋ぎに行こうとして、弾かれているのかなと思います。

インターネット側にDBのポートは開けたくないですからね。

これで実際にDB接続ができ、SQLも問題なく実行できましたので安心安心。

まだまだ修行が足りない、ということですね。

まとめ

社内ネットワークだと、わざわざ鍵認証せずにローカルIPアドレス指定で接続することがあるかと思いますが、プライベート環境だと自宅PCから自分が契約したクラウド上のサーバにアクセスする際は、SSH接続で鍵認証を行うのがセキュリティとして良いかと思います。

最初は環境設定が少し面倒ですが、これさえ終われば後は開発に集中できそうです。

コメント

タイトルとURLをコピーしました