本文へスキップ
← ガイド一覧

自分のPCからサーバーのDBに安全に接続する (SSHトンネル)

HeidiSQL、DBeaver、MySQL WorkbenchなどのプログラムでサーバーのDBを見たいときでも、DBのポート(3306)をインターネットに開けてはいけません。 世界中から自動化されたログイン試行がすぐに届きます。代わりにSSHトンネルを使えば、すでに開いているSSH接続を通じて、DBに安全に接続できます。

DBのインストールとアプリ専用アカウントの作成については、先にデータベースをインストールするを参考にしてください。

方法1. DBプログラムのSSHトンネル機能 (いちばん簡単)

ほとんどのDBプログラムに、SSHトンネルの設定欄があります。

HeidiSQL

  1. 新しいセッション → ネットワークの種類: MariaDB or MySQL (SSH tunnel)
  2. 設定タブ: ホスト127.0.0.1、ユーザー・パスワードはDBアカウント、ポート3306
  3. SSHトンネルタブ: SSHホスト + ポートにサーバーのIPと22、ユーザー名・パスワードはサーバーのSSHアカウント、ローカルポートは3307など空いている番号

DBeaver

  1. 新しい接続 → MariaDB(またはMySQL)
  2. Mainタブ: Host 127.0.0.1、Port 3306、DBアカウントとパスワード
  3. SSHタブ: 「Use SSH Tunnel」にチェック、HostにサーバーのIP、Port 22、サーバーのSSHアカウントとパスワード(またはキーファイル)

2つのアカウントは取り違えやすいです。SSHの欄にはサーバーの接続アカウント、DBの欄にはDBアカウントを入れます。

方法2. コマンドでトンネルを開く

自分のPCのターミナル(PowerShell)で実行し、このウィンドウは開いたままにしておきます。

ssh -N -L 3307:127.0.0.1:3306 username@server-ip
  • 自分のPCの3307番に来た接続を、サーバー内の127.0.0.1:3306(DB)に転送するという意味です。
  • パスワードを入力した後、何も出力されずに止まっていれば正常です。

これで、DBプログラムからホスト127.0.0.1、ポート3307、DBアカウントで接続します。使い終わったら、トンネルのウィンドウでCtrl + Cを押して閉じます。

接続できないとき

  • Access denied for user — DBアカウントが'user'@'localhost'として作成されているか確認してください。トンネルを使うと、DBからはサーバー内から接続したように見えます。
  • SSH接続の失敗 — まずSSH接続ガイドのとおりに、ターミナルから接続できるか確認してください。
  • 3307ポートがすでに使用中 — 自分のPCにMySQLがインストールされている場合は、3308など別の番号を使ってください。

Dockerで立ち上げたDBの場合

コンテナのポートを-p 127.0.0.1:3306:3306のようにサーバー内だけに接続しているなら、上の方法をそのまま使えます。-p 3306:3306で開けている場合は、ufwを無視してインターネットに公開されている状態なので、すぐに修正してください。(Dockerガイドのファイアウォールに関する注意)

解決しない問題がある場合は、Discordのチケットでお問い合わせください。