SSHからトンネルでMySQLサーバーに接続することが複数ある場合、その切り替えや使い分けを config で賄います。もちろん一つだけの接続でも有効。
configを作成する具体的な話は config にトンネル設定を書く ↓ にあります。お急ぎの方は与太話をすっ飛ばしてください。
目次
公開鍵の認証
さて、macOS10.12 Sierra でトンネル接続 という記事の中で SSH Tunnel Manager を取り上げました。
SSH Tunnel Manager は小気味のよいトンネル接続アプリです。それ以前に使っていた
Coccinellida というもっと優れたアプリがありましたが10.11El Capitanまでしか使えません。
SSH Tunnel Manager は Coccinellida と違って公開鍵の指定ができません。指定はできませんが、お約束通り ~/.ssh/id_rsa があれば勝手に繋げてくれます。でも明示的に ~/.ssh/id_rsa を指定することができません。

id_rsa
.sshという見えないフォルダに収めるid_rsaはサーバーに接続するための認証の仕組みです。ssh 接続では多くの場合IDとパスワードによる認証ではなくて公開鍵認証を用います。鍵の名前や保存場所は基本的にどこでもいいのですが、一般的に ~/.ssh/id_rsa と定まっているようです。
複数のサーバー
さて接続したいサーバーが一つだけならいいんですけど増えてくると困ったことになります。サーバーごとに公開鍵が異なるだからです。id_rsaを複数用意して使い分けたい。でもそれどうやんの?
id_rsaを使い回せないか
同じ id_rsa を複数サーバーで使い回せないかと思いましたができませんでした。できるんですか?できないですよね。サーバーごとにSSHの認証鍵のペアを作る必要があります。
複数の id_rsa
サーバーごとにid_rsaを作成します。例えば id_rsa_xsrv1, id_rsa_xsrv2 と名前を変えて ~/.ssh/ に置きます。
SSH Tunnel Manager はわかってくれない
SSH Tunnel Manager では公開鍵認証の在処を指定することができません。問答無用で ~/.ssh/id_rsa を利用して繋げようとします。たった一つの id_rsa でしか使えません。
Coccinellida みたいに、設定で id_rsa を指定することができるアプリありませんか?探しました。けど、これといった有能なアプリを見つけることができませんでした。
何とか複数の id_rsa を使い分けることができないでしょうか。
config
config というファイルを使ってコンフィグすることができると聞き及んで「これだ」と小躍りしました。
config は SSH の設定を司ることができるテキストファイルです。自分で作成して ~/.ssh/config に収めます。
サーバーごとに設定やどの鍵を利用するかの指定を書き記します。
Host siteA HostName sv99999.xserver.jp port 10022 User siteAadmin IdentityFile ~/.ssh/id_rsa_siteA Host siteB HostName sv88888.xserver.jp port 10022 User siteBadmin IdentityFile ~/.ssh/id_rsa_siteB
こんなふうに見様見真似で書いて、それぞれサーバーごとに id_rsa を指定してみました。
最初の Host がタイトルみたいなもので、Host 以下次のHostまでの間に設定を書きます。タイトルであると同時にこれがコマンドになります。ターミナルで「ssh Host名」と入力するだけでその設定に基づいたコマンドを送り込んでくれるというものです。
sshの設定を施し、ターミナルで 「ssh siteA」「ssh siteB」とテストすると上手く動いてくれました。
SSH Tunnel Manager では config が効かない
やれ上手くいったぞとまた小躍りして、今度は SSH Tunnel Manager で試します。SSH Tunnel Manager が config を読み込んでくれると期待したんです。
SSH Tunnel Manager では config が無視されました。configがあろうがなかろうが単に.ssh/id_rsa のパスフレーズを訊ねられるだけです。
config に書いたことなどなかった扱いでした。つまりやっぱり SSH Tunnel Manager ではひとつの公開鍵認証しか使えないということです。がっかり。
じゃあ仕方ない、ターミナルでやるか
諦めきれず半日格闘したあげくにふと基本的なことを思いつきます。
そもそも SSH Tunnel Manager を使う理由は、ターミナルでその都度ややこしいコマンドを入力するのが苦痛だったからです。
でも config というものの存在を知りました。これはもちろん id_rsa を管理するだけのものではありません。設定を保存してショートカットで繋げやすくすることができます。
「ssh siteA」とタイプするだけで済むんだから、アプリを使うまでもなく、単にターミナルで接続すればいいだけではないか。
config にトンネル設定を書く
config に何をどう書けばいいのか、さらに半日格闘して見つけた結果だけを以下に書きます。
必要な情報
- SSHで接続するサーバー名
- ポート番号
- ユーザー名
- そこからトンネルで繋げるMySQLサーバー名
- 公開鍵の名前とローカルの在処
- 公開鍵作成時に設定したパスフレーズ
config の書き方
さて config の書き方、具体的にいきます。
Host … 好きな管理名。簡素に。これがコマンドにもなります。
HostName (例)sv0000.xserver.jp … sshで接続するサーバー名
port (例)10222 …ポート番号(xserverは10022)
User … サーバーのユーザー名。
IdentityFile (例)~/.ssh/id_rsa_xsrvA … id_rsaのローカルの在処
LocalForward (例)2022 mysql9999.xserver.jp:3306
これは Localhost のポート番号(何でもいい)+ 目的のMySQLサーバー名 + :3306(ポート番号)ということで、最初の2022ってところは何でもいいそうです。3306はよくわかりませんがトンネル使ってMySQLサーバーに接続する際のポート番号ですか。3306で繋がっているので3306にしています。
もし ODBC Manager で DSN を作成しているならその設定と同じです。これから作るなら数字を合わせます(→ FileMaker Pro を MySQL サーバーに接続する その2 SSHトンネル)
以降はオプション的な扱いです。
ServerAliveInterval (例)120 … 接続したら120秒に1度何かを送信して、接続が勝手に切れないようにします。SSHの接続は一定時間で勝手に接続切れますから防止策。
AddKeysToAgent … AddKeysToAgent 接続する際、パスフレーズをその都度訊ねられます。パスフレーズを保存してしまいますか、はい。です。わざわざ AddKeysToAgent を書くんだからその値は大抵yesですわなあ。
UseKeychain … これはMacのキーチェーンにパスフレーズを保存するか、はい。です。いいえなら最初から書く必要ないし。
ということで、セキュリティ上の観点からパスフレーズを保存しない場合は AddKeysToAgent yes も UseKeychain yes も書きません。
私の設定のひとつはこんな感じです。
Host boo HostName sv*****.xserver.jp port 10022 User *** IdentityFile ~/.ssh/id_rsa_boo LocalForward 2022 mysq******.xserver.jp:3306 ServerAliveInterval 120 AddKeysToAgent yes UseKeychain yes
ということで設定はこれくらいでOKでしょうか。
接続と終了
ターミナルに「ssh Host名」を入力するだけでsshトンネルでMySQLに接続できます。上記の例では「ssh boo」です。
接続を終了するときはターミナルに「exit」と入力してリターンします。
実は私はあまりにもアホで、接続を切る方法が全然わかりませんでした。exit が出口です。こんな基本的で当たり前なこと、誰もわざわざ教えてくれなかったんですよ😭
ということで、複数のサーバーでsshトンネルするための設定を使い分けることに成功しました。
もちろん複数でなくひとつだけの設定でも有効。暗号のようなコマンドではなく「ssh ○○」とタイプするだけでトンネル接続ができるようになります。