2012年7月5日木曜日

ssh経由でデータベースに繋ぐ方法

お客さんの鯖にsshでログインしてターミナルでDBを触ってるサバンナの住人の方へ。
実際のところよくある風景だと思います。
自分もコレがかなり煩わしく、phpMyAdminすら入れれない状況でした。
そんな状況を解決する方法はsshトンネル。

Mysqlでは

A5:SQL Mk-2 から SSHトンネルを利用して MySQL へ接続する


こんな感じでSSHクライアントを使ってローカルのSQLクライアントを利用することができます。
LinuxやMacはいいけど問題はWindowsにsshクライアントが標準でついていないこと。
ここではcygwinを例にしてますがcygwinを入れるのはちょっと…って人向けに代替案。

1 Git shell
GitHubを使って居る方でGitHub for Windowsをインストールしてる人はついてきてるはず。
これはcygwinと一緒でsshクライアントがついてくるのでこちらを使ってコマンドを叩けます。
具体的には起動させて以下のコマンドを叩きます。

ssh -N -L 3307:127.0.0.1:3306 ログインするユーザ名@ログインするサーバ -i 鍵

な感じ。
鍵を使っていない場合は -i から後ろはいりません。
A5を使ってる方は後はリンクの通り、接続情報を入力すればつながります。
私はこの方法で繋いでいます。
Githubがまた一歩好きになりました(関係ない)
ついでにLinuxやMacの人はターミナル立ち上げて同じコマンドを叩けばいけます。

2 PuTTY
Windowsのsshクライアントとしてはメジャーなクライアントかと。
こちらはメールをssh経由で使う方法ですがトンネルの作り方は参考にどうぞ。
GUIで出来き、分かりやすいのでオススメです。

3 Tera Term
Tera Termもメジャーなsshクライアントですね。
ここで紹介する例はリモートデスクトップ用のトンネルの作り方ですが参考にどうぞ。

 
基本的にsshでトンネルさえ作ればローカルにつなげるのと同様にサーバに接続できるようです。
データベースに繋ぐ時は

・ データベースに実際につないでいるのは接続先のユーザ
・ SQLクライアントからはlocalhostにつないでいるように見える

と言う点に注意です。
具体的にトンネル時にサーバ側に指定するポートですが、defaultは

・ mysql 3306
・ postgreSQL 5432
・ Oracle 1521

です。
自分はsshでトンネルしてA5でPostgresもMysqlも繋いでいます。
他の例ではPostgresにpgAdminで接続できるそうです。



ということで現場で生psqlでSQLを書いてたりして苦労してる方は是非一度お試しください!!