sshトンネリングで外部DBを操作してみた

はじめに

ローカルのDBや社内ネットワーク上のDBを操作する場合、HeidiSQLなどのクライアントツールを使って操作する方法は簡単でおすすめだ。

サーバー側のコマンドなどを覚える必要もなく、GUI画面をマウスで分かりやすく操作できる。
結果を視覚的に確認しやすい利点もあるだろう。

ただし、DBサーバーがファイアーウォールで区切られた別のネットワーク上にある場合や、あるいはインターネットの向こう側にある場合はどうだろうか。

一般的にDBプロトコル用のポートは外部には解放されていないので、クライアントツールから直接接続することはできない場合が多い。

ただし、sshなどで接続可能なサーバーが公開されていて、そのサーバーからDBが可視となっている場合は、以下で紹介する方法を使えばPC用のクライアントツールを使って外部DBに接続することができる。

簡単に言えば、DB用のプロトコルをsshで「包み込んで」中継用のsshサーバーまで通し、そこから先はDB用のプロトコルを取り出して外部DBへ接続して操作する方法だ。

この方法をsshトンネリングという。

DBサーバーがクライアントから不可視でも問題ないし、sshサーバーとDBサーバーが同じサーバーでも問題ない。

一見すると非常に複雑そうに思えるが、実はHeidiSQLなどのツールを使えば比較的簡単な設定のみで実現することが可能だ。

今回は、実際に稼働しているDBをサンプルとし、PC上のHeidiSQLから直接操作する方法を試してみることにする。

設定方法

まずは事前に今回使用する環境について必要な情報を開示しておこう。

ターゲットのDBはMySQLだ。
DBが動いているサーバーは不可視となっていて、直接sshでアクセスすることはできなくなっている。

その代わり、中継用の踏み台として使えるサーバーが用意されていて、このサーバーへはsshを使って接続可能となっている。

また、踏み台サーバーからDBサーバーのMySQL用のポートにアクセスすることは許可されている。

この様子を簡単に図示すると以下のようになる。

この状況でPCからHeidiSQLを用いて直接DBを操作するには、sshでPCから踏み台にアクセスする設定と、DB用のプロトコルで踏み台からDBサーバーにアクセスする設定の2つが必要だ。

残りの部分はHeidiSQLが自動的にハンドリングしてくれるので、上記の2か所のみを設定すればよい。

それでは実際に設定をしてみよう。

まずは、HeidiSQLを起動してセッションマネージャーの画面を開こう。
セッションマネージャーの画面とは、通常は起動直後に表示される画面のことだ。

まずはこの画面で「新規」を選択しよう。

すると、以下のように Unnamed という名前のセッションが新規に作成される。

この Unnamed を編集して外部DBへの接続設定をしていこう。

続いて、「ネットワーク種別」の右にあるプルダウンリストをクリックすると、上から3つ目に「MariaDB or MySQL (SSH tunnel)」と言う項目が現れる。

次はこれを選択しよう。

この時点で、画面の状態は以下のようになっているはずだ。

「ホスト名/IP」、「ユーザー」、「ポート」などの項目にはデフォルト値が設定されているので、次はこれらを環境に合わせた値に変更しよう。

ちなみに、この画面で設定するのはDBサーバーの設定値で、sshサーバーの設定値ではないので注意が必要だ。

特に「ホスト名/IP」の場合、インターネット向けと社内ネットワーク向けなど、ネットワークごとに複数の設定が用意されていることがあるので気を付けよう。
設定すべき値は、「sshサーバーから見た時の」ホスト名、またはIPアドレスの方となる。

もちろん、サーバーに設定されている「ホスト名/IP」が1つだけの場合は、その値を設定するだけでよい。

パスワードの欄にも忘れずに入力しよう。
準備ができたら、左下あたりにある「保存」を選択しよう。

以上で2つある設定画面のうち、最初の1つの設定は終了だ。

続いて、画面中央部上側にある「SSH トンネル」タブをクリックしよう。
こちらで表示される画面が、sshサーバー側の設定画面だ。

一番上に、plink.exe という設定項目が表示されているが、これはHeideSQL上でsshトンネリングを行うためには必須のツールだ。
このツールは、PuTTYと言う ssh/telnet クライアントツールに同梱されて配布されている。

もし、PuTTYをインストール済みの場合は、ローカルPCのどこかにplink.exeが既に存在しているはずだ。

PuTTYをインストールしていない場合は、上記画面の青色のリンク「plink.exe をダウンロード」をクリックしよう。

plink.exeを入手する

前項で plink.exe を簡単に紹介したが、もし持っていない場合は本項の手順に従って入手しよう。
plink.exe をすでに所持している場合は、本項は飛ばして構わない。

さて、前項の画面でダウンロード用のリンクをクリックすると、以下のような画面がブラウザーに表示される。

ここで、「Download it here.」と書かれたリンクをクリックしよう。

すると、以下のようなページへ遷移する。

このページを下にスクロールして行こう。
すると、半分くらいスクロールしたあたりで以下のようなダウンロード用のリンクが表示されるはずだ。

ダウンロード用のリンクは、環境に応じて3通り用意されているので、使用している環境に合わせて選択しよう。

インテル互換の64ビットCPUを使ったシステムであれば一番上を選択すればよい。
Arm系であれば2番目のリンク、インテル系の32ビットシステムの場合は3番目のリンクを選択しよう。

以下のようにファイルがダウンロードされれば成功だ。

できれば、このファイルはどこか分かりやすい場所に移動して格納しておこう。
今回はCドライブの下にPuTTYというディレクトリーを作成して、そちらにファイルを格納した。

以上で、plink.exe の入手方法の説明は終了だ。

なお、画面に見える puttygen.exe と言うツールや、key と言うディレクトリーは、いずれもsshの公開鍵/秘密鍵認証を行うときに使用するリソースだが、今回の記事では使用しないのでいったん無視していただいて構わない。

sshサーバーの設定:続き

再び HeidiSQL の画面に戻り、「SSH トンネル」タブを表示しよう。

最初は、plink.exe のディレクトリーを HeidiSQL に知らせる設定だ。
ここでは、plink.exe の設定ボックスの右側にあるディレクトリーのアイコンをクリックしよう。

すると、以下のようなファイル選択画面が表示される。
ここで、plink.exe を選択しよう。

続いて、「SSH ホスト+ポート」の設定をしよう。
前述の通り、ここへは「sshサーバー」のホスト名またはIPアドレスを設定しよう。

ポート名については最初からデフォルト値の22が設定されている。
たいていの場合はこの設定のままでよいはずだが、不明な場合にはサーバーの管理者に確認しよう。

続いて、「ユーザー名」と「パスワード」を設定しよう。

なお、今回は説明の簡素化のためにパスワードを使用したが、本来おすすめなのはパスワードを使用せず、代わりに公開鍵/秘密鍵のペアを用いて認証を行う方法だ。
その方がセキュリティ面の安全性が高いからだ。

その場合の秘密鍵の格納場所を指定するのもこの画面からとなるが、具体的には「秘密鍵ファイル」の右側にあるディレクトリーアイコンがそのボタンとなる。

興味がある場合は覚えておくとよいだろう。

さて、ここまでの設定が完了したら、左下の「保存」ボタンを押下しよう。

以上で、ssh トンネリングで外部DBへ接続する設定は完了だ。

では、実際にDBに接続してみよう。
セッションマネージャーの画面から「Unnamed」を選択し、画面右下の「開く」を押下しよう。

すると、以下のように外部DBのテーブル一覧画面が表示されるはずだ。
以降はローカルのDBを操作するように、HeidiSQLで外部DBを操作することが可能だ。

以上で、外部DBを ssh トンネリングを使用してクライアントツールで操作する方法の紹介は終了だ。

まとめ

sshトンネリングを用いてクライアントツールから外部DBを操作する方法を紹介した。
この方法を使える条件は、sshで接続できるサーバーが存在して、そのサーバーからDBが可視となっていることが必要だ。

今回は公開鍵/秘密鍵方式の認証は使わずに単純なパスワード方式を使って紹介したが、本来は前者の方式を使う方が安全でおすすめだ。

クライアントツールにはHeidiSQLを、またssh/telnetクライアントツールPuTTYに付属の plink.exe を利用している。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です