とあるプログラマの備忘録

都内某所に住むプログラマが自分用に備忘録を残すという趣旨のブログです。はてなダイアリーから移動しました!

Macから踏み台サーバを2つ介してMysql接続する方法 其の二 ~多段SSH接続編

※最終目標
ローカル環境から踏み台サーバを2つ介して最終的にMacGUIからDB接続するというもの。

ローカル       :自分のMac
踏Aサーバー    :一個目の踏み台サーバー(自社のサーバーの事)
踏Bサーバー    :二個目の踏み台サーバー(他社のサーバーの事)
DBサーバー     :最終的に繋がる予定のMysqlサーバー

ローカル > 踏Aサーバー > 踏Bサーバー > DB と多段ポートフォワーティングしてMacGUIから接続したいのです。
今回の前提条件として、接続の許可は上記の順番のサーバーのみ接続許可されています。
ローカル > 踏Bサーバーや
踏Aサーバー > DBサーバーなどの接続はできません。

プロジェクトとかだとあるんです。こんな面倒な環境が。。


2章 ローカル > 踏Bへ 踏Aを介して接続する

前回はローカル > 踏BサーバーへのRSA認証接続をしましたが、
今回はこの接続を踏み台にして踏Bサーバーへ接続をします。
これが属に言う多段接続です。


・踏Aでssh-keygenをして踏Bへ接続できるようにする
前回の記事のローカル > 踏AへのRSA認証と方法は全く同じですので
前の記事を参照してください。


自分の場合は踏Bは他社サーバーだった為、踏Bの公開鍵を既にもらっていました。
この場合は設定などは特に必要無いので、そのままもらった公開鍵(id_rsa)を使いましょう。


踏A > 踏BへのRSA認証接続ができたら、
踏Aで作ったid_rsaファイルをローカルに持ってきます。
※ただし、同じ場所に置くと踏Aの接続用に作ったid_rsaファイルとかぶってしまうので
名前を適当に変更しましょう。今回は~/.ssh/humiB_id_rsaとします


では早速多段SSH接続します

ローカルにて
・~/.ssh/configに踏Bへの設定を追記します。

以下を追記してください。

#踏B
Host humiB
  Hostname            humidaiB.co.jp
  IdentityFile        ~/.ssh/humiB_id_rsa
  ProxyCommand        ssh humiA nc %h %p
  User                raharu0425_humiB

Host:適当な名前で大丈夫です今回はhumiBとしました
Hostname:踏Bのホスト名又はIPアドレスと入れましょう
IdentityFile:踏Bのid_rsaのパスを指定します
ProxyCommand:ここに前回作った設定のhumiAを踏み台にして踏Aに接続するというコマンドが追加されています
User:踏Bに入るユーザー名を入れましょう

これをふまえて、最後に踏B > DBサーバーのへのRSA認証&~/.ssh/configの設定をやります。
やり方は今まで同様です。

最終的にローカルの~/.ssh/configに以下の様な設定が書き込まれる筈です。

Host *
ServerAliveInterval 30

#踏A
Host humiA
  Hostname            humidaiA.co.jp
  IdentityFile        ~/.ssh/id_rsa
  User                raharu0425_humiA

#踏B
Host humiB
  Hostname            humidaiA.co.jp
  IdentityFile        ~/.ssh/humiB_id_rsa
  ProxyCommand        ssh humiA nc %h %p
  User                raharu0425_humiB

#DBサーバー  
Host mysql_server
  Hostname            mysql.co.jp
  IdentityFile        ~/.ssh/mysql_server_id_rsa
  ProxyCommand        ssh humiB nc %h %p
  User                raharu0425_mysql

さて、これでローカルから各踏み台を介して最終的にDBサーバーまでssh接続できるようになった筈です。
ローカルで以下のコマンドでちゃんと入れるか試してみましょう。

もしもここでpasswordを求められたり、
うまくssh接続できない場合は何か間違っています。
どこの経路まで正常に接続できるのか確認しましょう。


全てローカルにて


踏み台Aに接続

$ ssh humiA


踏み台Bに接続

$ ssh humiB


DBサーバーに接続

$ ssh mysql_server


※うまく行かない場合は以下このところを確認しましょう。
・Hostnameにaliasを指定している場合ping [hostname]が通るか?
ssh -v [alias] デバックモードで接続を行いエラーが出ていないか?


さてこれでやっと準備が整いました。

次回はmysqlクライアントのSequel ProでMysqlに接続します。



関連記事