ユーザーがマシンAとマシンBとの間でRAS暗号を用いて安全にログインする方法。
前提条件 マシンAのホスト名は SystemA.domain.com とする。 マシンBのホスト名は SystemB.domain.com とする。 ユーザー名は username であり、両マシンのユーザーである。 両マシン共に sshd が動作している事。 SSHで利用するポート番号(一般には22番)が両マシン間で透過できる事。 |
マシンAでの準備 ユーザーはマシンAにログインする。 もしも ~/.ssh というディレクトリが存在していなければ自分のホームディレクトリ ~ にて次のコマンドを実行する必要がある。 $ ssh-keygenコマンド実行中にパスフレーズ(パスワードの様なもの。スペースで区切った文章が使用できる。)の入力が求められるので忘れないように記憶(記録)しておく必要がある。 これを pass phrase A とする。 このコマンド実行が終了すると ~/.ssh というディレクトリが出来ている。 この ~/.ssh/identity.pub というファイルをマシンBに持っていく必要がある。このとき注意しなければならないのは、「安全」な方法で持っていく必要があることだ。インターネット経由での転送は「安全」ではない。途中で誰かに見られてしまう可能性があるからだ。一番良いのは「フロッピィー」に記録して物理的にマシンBの所まで運んで行くことだ。 |
マシンBでの準備 ユーザーはマシンBにログインする。 もしも ~/.ssh というディレクトリが存在していなければ自分のホームディレクトリ ~ にて次のコマンドを実行する必要がある。 $ ssh-keygenコマンド実行中にパスフレーズを求められるがマシンAで入力したパスフレーズと同じものでも違うものでも良い。 これを pass phrase B とする。 このコマンド実行が終了すると ~/.ssh というディレクトリが出来ている。 この ~/.ssh/identity.pub というファイルをマシンAに持っていく必要がある。 |
マシンAにマシンBでのユーザー情報を追加する作業 ユーザーはマシンAにログインする。 マシンAの ~/.ssh/authorized_keys に対してマシンBの ~/.ssh/identity.pub の内容を追加する。 マシンBの ~/.ssh/identity.pub が ~/.ssh/identity.b としてコピーされていると仮定すると次のようなコマンドとなる。 $ cat ~/.ssh/identity.b >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys次にマシンBからの接続にてパスフレーズなしにログインできるように ~/.shosts にマシンBとユーザ名を追加登録する。 $ echo SystemB.domain.com username >> ~/.shosts $ chmod 600 ~/.shosts |
マシンBにマシンAでのユーザー情報を追加する作業 ユーザーはマシンBにログインする。 マシンBの ~/.ssh/authorized_keys に対してマシンAの ~/.ssh/identity.pub の内容を追加する。 マシンAの ~/.ssh/identity.pub が ~/.ssh/identity.a としてコピーされていると仮定すると次のようなコマンドとなる。 $ cat ~/.ssh/identity.a >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys次にマシンAからの接続にてパスフレーズなしにログインできるように ~/.shosts にマシンAとユーザ名を追加登録する。 $ echo SystemA.domain.com username >> ~/.shosts $ chmod 600 ~/.shosts |
ここまでの「まとめ」 以上で、それぞれのマシンにある ~/.ssh/identity.pub の内容がが相手側のマシンにある ~/.ssh/authorized_keys に追加されたことになる。 つまりこういう事だ。 マシンXのユーザーがマシンYに接続(ログイン)したい場合は、マシンXでの ~/.ssh/identity.pub をマシンYの ~/.ssh/authorized_keys に追加する。また、マシンYに於いては ~/.shosts にマシンXのホストドメイン名とユーザー名を追加しておくのだ。 ただし、これだけではマシンXからマシンYへの接続はできるが常にパスフレーズを求められる。また逆にマシンYからマシンXへの接続はできない。従ってマシンYの ~/.ssh/identity.pub もマシンXの ~/.ssh/authorized_keys に追加する必要もあるのだ。 |
マシンAからマシンBに安全にログインしてみる ユーザーはマシンAにログインする。 ここからマシンBにログインする為に次のコマンドを実行する。 $ slogin SystemB.domain.com最初の実行では「マシンBの登録」の可否が求められるので yes と答える。 同様に「マシンAで ssh-keygen を実行したときのパスフレーズ」が求められるので pass phrase A を入力する。 |
マシンBからマシンAに安全にログインしてみる ユーザーはマシンBにログインする。 ここからマシンAにログインする為に次のコマンドを実行する。 $ slogin SystemA.domain.com最初の実行では「マシンAの登録」の可否が求められるので yes と答える。 同様に「マシンBで ssh-keygen を実行したときのパスフレーズ」が求められるので pass phrase B を入力する。 このように両方向から接続出来れば次回からはパスフレーズを入力は求められなくなる。 以上で目的は達せられた。マシンAとマシンBとの間の通信はRAS暗号化されているので安全と考えられる。遠隔地にあるファイルサーバーとCVSを利用した複数地点でのプログラム開発も安心して行なえるようになる。尚、商用でSSHソフトウェア(ssh-1.2.27等)を利用する場合にはライセンスが必要となることを記しておく。 |
応用:遠隔地でCVSを使う マシンAにログイン中のユーザー(ログイン名は username と仮定。)がマシンB(ホストドメイン名は SystemB.domain.com と仮定。)にあるリポジトリ(ディレクトリは /home/username/cvs と仮定。)に従ったプロジェクト(名前は projectname と仮定。)をマシンAにて編集するには作業用ディレクトリに移ってから以下のコマンドを実行。 $ setenv CVS_RSH ssh $ cvs -d :ext:username@SystemB.domain.com:/home/username/cvs checkout projecttname後は普通に作業を進めていく。次回ログインしたときも setenv CVS_RSH ssh は必要なので .login 等に記述しておくと良い。 |