SSHトンネル接続を、接続アプリに頼らず 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を作成します。例えば id_rsa_xsrv1, id_rsa_xsrv2 と名前を変えて ~/.ssh/ に置きます。
id_rsa という名前はお約束のデフォルトであって、名前を変えてはいけないという類いのファイルではありません。好きに名前を付けて保存しておけばいいんです。
SSH Tunnel Manager はわかってくれない
SSH Tunnel Manager では公開鍵認証の在処を指定することができません。問答無用で ~/.ssh/id_rsa を利用して繋げようとします。たった一つの id_rsa でしか使えません。
Coccinellida は設定で id_rsa を指定することができました。でもOSに未対応で使えます。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 にトンネル設定を書く
必要な情報
- SSHで接続するサーバー名
- ポート番号
- ユーザー名
- そこからトンネルで繋げるMySQLサーバー名
- 公開鍵の名前とローカルの在処
- 公開鍵作成時に設定したパスフレーズ
config の書き方
さて config の書き方、具体的にいきます。
Host … 好きな管理名。簡素に。これがコマンドにもなります。
HostName …sshで接続するサーバー名 (例)sv0000.xserver.jp
port …ポート番号(例)10222 …(xserverは10022)
User … サーバーのユーザー名。
IdentityFile … id_rsaのローカルの在処(例)~/.ssh/id_rsa_xsrvA
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 … 接続する際、パスフレーズをその都度訊ねられます。パスフレーズを保存してしまいますか。yes です。
UseKeychain … これはMacのキーチェーンにパスフレーズを保存するかどうかです。yes です。
具体例です。以下のように書きます。
Host digiboo HostName sv*****.xserver.jp port 10022 User *** IdentityFile ~/.ssh/id_rsa_boo LocalForward 2022 mysq******.xserver.jp:3306 ServerAliveInterval 120 AddKeysToAgent yes UseKeychain yes
接続と終了
ターミナルに「ssh Host名」を入力するだけでsshトンネルでMySQLに接続できます。上記の例では「ssh digiboo」です。
接続中はターミナルウインドウを出しっぱなしにしておきましょう。接続を終了するときはターミナルに「exit」と入力してリターンします。
実は私はあまりにもアホで、接続を切る方法が全然わかりませんでした。exit が出口です。こんな基本的で当たり前なこと、誰もわざわざ教えてくれなかったんですよ😭
複数の接続にも対応できるし、「ssh ○○」とタイプするだけでトンネル接続ができるようになります。接続アプリに頼るより簡単です。