今回もいつもと少しテーマを変えて ssh の多段アクセスの話です。
計算機資源を遠隔に置いて処理計算をおこなう場合、二段階の認証方式にすればより安全である話を以前しました。
また ssh ポートフォワーディングや SSH Filesystem で複数の計算機を統合して利用する方法についても説明しました。
今回はこの補足で、外部から計算機資源環境を利用する際に、多段 ssh アクセスを簡易化することで効率を上げる方法を書きます。
二段階のログイン認証と ssh の踏み台設定
上記のリンク先で説明した通り、セキュリティを考慮するために ssh 公開鍵認証で接続する外部の踏み台サーバーと、パスワード認証で接続する内部の計算機資源による構成を考えます。
踏み台となるサーバーを公開鍵認証にしておいて、さらにそこからしか接続できない設定にしたパスワード認証のホストを奥に設置するという構成です。
このように二段階の認証を設定した場合、踏み台を経由して内部の計算機に外から接続するためには ~/.ssh/config に次のように書くと一発で認証できます。
Host gaibu.your.net
User yourname # 踏み台サーバーのユーザー名
Port 44444 # 踏み台サーバーのポート番号
Host naibu.your.net
User yourname # 内部サーバーのユーザー名
Hostname naibu # 内部サーバーのホスト名
Port 55555 # 内部サーバーのポート番号
ProxyCommand ssh gaibu.your.net -W %h:%p
これにより
- 踏み台となる計算機に対して ssh 公開鍵認証で自動接続
- 内部の計算機に対してパスワード認証
が一度におこなわれます。
結果的に外から ssh naibu.your.net すると内部の計算機のパスワードプロンプトに応答するだけで目的の資源にたどり着くことができます。
詳細はこちらが参考になります。
ssh ポートフォワーディング
以前に書いた通り ssh ポートフォワーディングを利用すると離れた計算機のポートをあたかも手元の計算機で動いているかのように転送することができます。これは多段 ssh を経由しても同じです。
これを利用すれば、例えば遠隔の計算機で実行している本来ローカルホストからしかアクセスできないテストサーバーのサービスを、あたかも手元の計算機で実行しているかのようにアクセスすることができたりします。
たとえば以下のコマンドでは内部計算機の 80 番ポートで起動した Web サービスを、手元の計算機の 9999 番に転送しています。
ssh -L9999:naibu.your.net:80 naibu.your.net
このようにすれば遠隔の計算機で開発し起動した Web アプリケーションに対して、ブラウザで localhost:9999 を開くだけでアクセスできるわけです。経路を ssh でトンネリングしていますから、安全にアクセスすることができます。
注意するべき点としては手元の計算機のテスト用のポート番号にアクセスされると遠隔の計算機のものが見えますから、外部からのアクセスを弾いておく必要があります。
(追記) heliac2000 さんより
下記の通りに -N -f オプションを指定することにより ssh プロセスが自動的にバックグラウンドになり、ポートフォワーディングのみを実行してくれるようになるとご教示いただきました。
ssh -N -f -L9999:naibu.your.net:80 naibu.your.net
一旦記事を消してしまったのでので手書きで追記しました。
まとめ
このような二段階以上の認証構成は、企業の内部のネットワークはもちろん AWS などのクラウドを使うにあたっても非常に有用なものとなります。
ほぼ必須とも言える技術なので身に付けると良いでしょう。