DBeaverでSSH Tunnelを設定してみる

Webの開発をしていると踏み台サーバーやプロキシを経由してデータベースにアクセスことはよくあることかと思います。 毎回ターミナルを開いて接続しても良いですが、長いコマンドを覚えるのは辛いです。 そこでDBeaverというDBクライアントを使用して簡単に接続できるようにしてみます。
2021.07.02

DBeaverとは

公式サイトから引用

開発者、データベース管理者、アナリスト、およびデータベースを操作する必要があるすべての人のための無料のマルチプラットフォームデータベースツール。MySQL、PostgreSQL、SQLite、Oracle、DB2、SQL Server、Sybase、MS Access、Teradata、Firebird、Apache Hive、Phoenix、Prestoなどの一般的なすべてのデータベースをサポートします。

コミュニティ版については無償で利用することができ、ある程度メジャーなRDBについては対応しています。

有料版の場合はNoSQLに対応していたり便利な機能があるようです。今回はコミュニティ版を使用します。

想定する構成

以下の図のような構成を考えます。

自分のPCからプロキシサーバーを経由して、AWS内の踏み台サーバーにSSH、そこからRDSに接続します。(プロキシを使っていない場合はプロキシの手順はスキップしてもらえると良いと思います。)

コマンドラインでこれを実行しようとすると以下のようになるかと思います。

実行例

// 踏み台に入る
ssh -i ~/.ssh/bastion.pem  -o "ProxyCommand=nc -x proxy.example.com:1080 %h %p" ec2-user@bastion.example.com
// 踏み台から接続(MySQLの場合)
mysql -h rds.local.example.com -P 3306 -u user -p

DBeaverでやってみる

  1. DBeaverを開き、メニューバーのデータベース > 新しい接続 を選択。
  2. DBを選択します。今回はMySQL5.7を使用します。
  3. 接続情報を入力していきます。今回は一般SSHProxy を入力します。

構成図ベースの設定例(設定値は実在しないデータなので適宜置き換えてください)

  • 一般

    • Server
      • Server Host: rds.local.example.com
      • Database: sample(データベース名)
    • 認証
      • ユーザー名: user
      • パスワード: DBのパスワード
  • SSH

    • SSH Tunnelを使用する: チェックする
    • Host/IP: bastion.example.com
    • User Name: ec2-user
    • Authentication Method: Public Key
    • Private Key: /Users/〇〇/.ssh/bastion.pem(フルパスで指定する)
  • Proxy

    • SOCKSプロキシを使用する: チェックする
    • SOCKS
      • ホスト: proxy.example.com

ここまでできたらテスト接続してみます。上手く行けば以下のように表示されます。

最後に

リモートのDBにもDBeaverから簡単に接続できるようになりました。

GUIで操作することでデータの検索や編集がやりやすくなるという方もいるかと思います。

一方で個人的な感覚としてはGUIだと編集が容易にできてしまうので、自分のローカル環境以外は

可能な限りデータベースにRead Onlyなユーザーを用意してからそのユーザーをDBeaverには設定しています。

一度設定してしまうと次からの接続はGUIポチポチするだけで簡単に繋げるようになるので、良さそうと思った方は是非使ってみてください。