自分のPCからサーバーのDBに安全に接続する (SSHトンネル)
HeidiSQL、DBeaver、MySQL WorkbenchなどのプログラムでサーバーのDBを見たいときでも、DBのポート(3306)をインターネットに開けてはいけません。 世界中から自動化されたログイン試行がすぐに届きます。代わりにSSHトンネルを使えば、すでに開いているSSH接続を通じて、DBに安全に接続できます。
DBのインストールとアプリ専用アカウントの作成については、先にデータベースをインストールするを参考にしてください。
方法1. DBプログラムのSSHトンネル機能 (いちばん簡単)
ほとんどのDBプログラムに、SSHトンネルの設定欄があります。
HeidiSQL
- 新しいセッション → ネットワークの種類: MariaDB or MySQL (SSH tunnel)
- 設定タブ: ホスト
127.0.0.1、ユーザー・パスワードはDBアカウント、ポート3306 - SSHトンネルタブ: SSHホスト + ポートにサーバーのIPと
22、ユーザー名・パスワードはサーバーのSSHアカウント、ローカルポートは3307など空いている番号
DBeaver
- 新しい接続 → MariaDB(またはMySQL)
- Mainタブ: Host
127.0.0.1、Port3306、DBアカウントとパスワード - 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ガイドのファイアウォールに関する注意)