別の所に書いていた日記なんですが、エライ苦戦したので、Blogにアップしておきます。第二段。 レシピはSSHの多段階接続です。 ちなみにsshdはOpenSSHです。 なんというか、networkの華がある機能ですねぇ。 が。。。。

ssh+proxycommandに大苦戦。

構成としては、
クライアント -----> 踏み台sshサーバ(a) -----> 目的のサーバ(b)
って事がやりたい訳です。 なんでこんな面倒な事するかというと、 直接目的のサーバへはセキュリティ上sshを許可したくない。 かといって、一端踏み台サーバにログインして、目的のサーバにsshすると、踏み台サーバに全ての公開鍵を持っていなくてはならないので、セキュリティ上問題があるから。 で対策として考えたのはssh -D かProxyCommandの2通り。 ssh -Dのダイナミックルーティングだと、踏み台サーバに鍵を持っていないといけないらしいので、却下。ProxyCommandで対応することにした。 やり方は結構単純で、 クライアントのlinux内に〜/.ssh/configというファイルを作っておいて、 こんな感じに記入。
Host hoge.example.com
  ProxyCommand ssh -l [踏み台サーバのユーザ] piyo.example.com nc %h %p
コレでhoge.example.comにsshすると、piyo.example.com へ ssh 接続して nc コマンドを起動します。 nc コマンドの引数には %h と %p を指定していますが,これは (b) を起動する際に,(a) を起動したときの接続先のホスト名とポート番号に置き換えられます。 この設定なら %h は hoge.example.com に,%p は 22 に置き換えられます。 問題はsshを全て公開鍵認証にしてあること、 踏み台サーバも公開鍵がないとアクセスできないので、 実際sshはこうやって打ちます。
# ssh -l [目的サーバのユーザ] hoge.example.com -i [公開鍵のパス]
この公開鍵は、踏み台サーバ+目的のサーバ双方で同一の鍵にして有ります。(別々に指定するやり方もあるかも・・・)

これから実験する予定な事

1 踏み台と目的サーバの公開鍵を分けられるか? 2 分けられない場合パスフレーズだけでも別にできるか? 3 クライアントがwinの場合はどうやる? 辺りです。1はよく解らないのですが、2はいけそうな気がします。 2段階目の接続のときにもパスフレーズ聞かれましたから。 windowsで同じことをやる方法はソフトゥエア依存なので、これから調べます。PuTTyにはそういう機能があるらしいけど。。。どうなだろ?

ちなみに調べていくうち知ったTips

  • sshコマンドで公開鍵を指定しない場合、〜/.ssh/identityというファイルを探しに行く。ファイルが見つかった場合、コレを公開鍵として使う。通常のパスワード認証のサーバにアクセスしても問題はない。(鍵のパスフレーズを無駄に入力させられるだけ)この方がオススメ。
  • 公開鍵のパーミッションは600にしておくべし。他のユーザが読めるようだとエラーになる。
  • sshでつながらない場合はssh hoge.example.com -vとやるとデバック出力が見れる。
  • ログが見たい場合は/var/log/secure。ただほとんど接続先のログに吐かれる(あたりまえか・・)
はぁ〜、しんどかった。 ヽ(´Д`;)ノアゥア...