実践で学ぶ、一歩進んだサーバ構築・運用術

第 10 回 ssh (中編)


ファイアウオールの外から中へ

以上は, ファイアウオールの内側からインターネット上のホストへの ssh 接続ですが, 逆にインターネット上の任意のホストから ファイアウオールの内側のホストに対する接続もまったく同様に設定できます。 まず図 1図 2 に示したように手作業でログインを行ってみて, ProxyCommand に指定するコマンドの仕様を図 3 に示したように決定します。 後は perl スクリプトなどでその仕様を満たすコマンドを記述するだけです。 多くの場合, 図 6 で示したスクリプトの login サブルーチンの部分を変更するだけで済むでしょう。

多くのサイトにおいて, 外部からのログインには, OTP(One Time Password)など ログインごとに異なるパスワードの入力が必要だと思いますが, perl スクリプトなら認証サーバーが送ってくるチャレンジを読み取って 対応するレスポンスを生成するプログラムを書くことも難しくありません。 OTP のパスフレーズは ssh-askpass コマンドなどを使えば, その都度ユーザーに入力させることができます。

ここで注意すべきなのは, OTP を計算するためのパスフレーズをスクリプトに埋め込んではいけない, ということです。 例えそのスクリプトが個人用の PC だけに入れてあって, しかも PC 自体にパスワードをかけて他の人が使えないようにしてあったとしても, その PC ごと盗んでしまえばスクリプトの内容を読む方法はいくらでもあります。 OTP のパスフレーズが盗まれれば, ssh 接続先の自分のサーバーだけでなく, サイト全体を危険にさらすことになるわけですから, やはり避けるべきでしょう。

ssh 接続のたびに OTP のパスフレーズを入力するのが面倒であれば, ssh のポート・フォワード機能を利用するのが良いでしょう。 例えば, ssh-askpass を呼び出してユーザーに OTP のパスフレーズを入力させ, ファイアウオールの内側のホストへ ssh 接続するためのコマンド proxy-into を書いたとして, これを ~/.ssh/config に図 12 のように設定しているとします。 図 13 のように実行すると, ssh-askpass コマンドのウィンドウが開いてパスフレーズの入力を求めるので, OTP のパスフレーズを入力すると社内 LAN 上のサーバー, kamiya.klab.org へログインできます。


Host   kamiya.klab.org
    ProxyCommand   /home/sengoku/bin/proxy-into %h %p

図 12 ~/.ssh/config の設定例


ssh -L 10022:localhost:22 kamiya.klab.org
図 13 ポート・フォワード機能付で ファイアウオールの内側のホストへ ssh 接続

図 13 の「-L 10022:localhost:22」はポート・フォワードの設定で, ssh クライアントを実行したホストの 10022 番ポートを ssh サーバー経由で localhost*6 の 22 番ポートへ転送します。 つまり, ssh クライアントを実行したホストのポート 10022 番に接続すると, ホスト kamiya.klab.org のポート 22 番へつながります。 つまり, ~/.ssh/config で, 図 14 のように設定しておけば, 図 13 の ssh 接続が続いている限り,


ssh kamiya
で OTP のパスフレーズを入力する必要なく, kamiya.klab.org にログインできるようになります。 もちろん, kamiya.klab.org 上で任意のコマンドをリモート実行したり, scp を使ってファイルをコピーすることもできます。


Host   kamiya
    HostName   localhost
    Port     10022

図 14 ~/.ssh/config の設定例
*6
サーバー側から見て localhost です。 つまり,ssh サーバーが動いているホストになります。

(ライターから)


本稿は日経Linux 2001 年 1 月号に掲載された、 実践で学ぶ、一歩進んだサーバ構築・運用術, 第 10 回「ssh (中編)」を日経BP 社の許可を得て転載したものです。

Copyright(C)2001 by 仙石浩明 <sengoku@gcd.org>
無断転載を禁じます

| home | up |

sengoku@gcd.org