2004年10月23日 ()

CVSでSSH接続

ネットワークでの通信は常に盗聴の危険があるといわれて久しいですが、未だにCVSのアクセスでpserverベースの認証を利用している人が多いようです。(私の回りだけでしょうか?)

pserverはパスワードを暗号化せずにサーバに送信するため、盗聴されてしまうとそのCVSサーバへアクセスするために必要なログイン名とパスワードの両方がばれてしまいます。

そこでお奨めしたいのがログイン名やパスワードだけでなくCVSへのコミットしたり更新したりするファイルの内容も暗号化できるSSH接続です。ここではCVSでSSH接続を利用する方法について書きたいと思います。

SSHクライアントには蛭子屋本舗で公開しているPuTTYごった煮版を使用する前提で書きます。オリジナルのPuTTYをご利用の場合はメッセージが英語だったりしますが、適当に意味が同じになっているメッセージを探してください。また、他のSSHクライアントにも同様なことができるものがありますので、そちらをお使いの場合は適宜置き換えて読んでください。

SSHの基本

SSHでの接続は公開鍵暗号方式を使って暗号化されます。
※公開鍵暗号方式がどういうものかは各自で調べてください。

ですのでSSHで接続するためには公開鍵と暗号鍵を用意して、
サーバ側に公開鍵を登録しておく必要があります。

鍵の作成

PuTTYで鍵を作成する場合にはPuTTYgenというツールを使います。

「生成」ボタンを押すと鍵の作成が始まります。表示されるメッセージの通りエリア内でマウスカーソルをぐりぐり動かしてください。

しばらく動かすと鍵の生成が始まり公開鍵が生成されます。

このままでは誰でも使用できちゃう鍵になってしまうのでパスフレーズを設定してあなただけしか使えない鍵にします。覚えられる程度でないといけませんができるだけ長いパスフレーズにした方がいいですね。

ついでに鍵のコメントにあなたの鍵であることを示す文字列(慣例的にはメールアドレス)を入れておきましょう。

ここで「秘密鍵の保存」を押すと秘密鍵がファイルに保存されます。適当な場所に保存しましょう。

それから、このダイアログに表示されている「OpenSSHのauthorized_keysファイルにペーストするための公開鍵」にある「ssh-rsa ...」の部分を全選択してコピーしておきましょう。あとでサーバに公開鍵を登録する際に使います。

公開鍵の登録

公開鍵の登録はサーバ側で行いますのでtelnetでもsshでも何でもいいのでCVSが動いているサーバにログインしてください。せっかくですのでここではPuTTYを使ってログインしてみます。

PuTTYを起動すると通常は設定ダイアログが開きます。

ホスト名にCVSサーバを入力して開くボタンを押すと、CVSサーバにSSH接続します。

ここでPuTTYでCVSサーバに接続するのが初めてたっだ場合には以下のような警告ダイアログが出ます。

ひょっとすると悪意のあるサーバがCVSサーバを騙っている場合もあるかもしれません。充分に気をつけて、本物のサーバだと思う場合には「はい」を押しましょう。

偽物かどうかなんてログインしないと分からないという場合にはここに表示されている鍵の指紋をメモしておき、「いいえ」を押してログインしたあと本物かどうかを確認しましょう。確認できたら再度ログインして同じダイアログが出たときに指紋が同じであることを確かめてから「はい」を押しましょう。偽物であることが分かったら管理者に連絡してください。

明らかに偽物であると分かった場合にはキャンセルを押してサーバの管理者に連絡しましょう。

さて、サーバが本物であると確認できた場合にはログインするために必要な情報を入力する必要があります。ここではまだ公開鍵を登録していないのでログイン名とパスワードで認証します。それでも暗号化だけはされているのでtelnetで接続した場合と違い盗聴によりパスワードが漏洩する心配はありません。

ログインできたら次のコマンドを実行します。

$ mkdir -p $HOME/.ssh
$ chmod 0700 $HOME/.ssh
$ vi $HOME/.ssh/authorized_keys

エディタで編集するだけですので最後のコマンドはviでなくてもemacsでも(catでも)構いません。使い慣れたものにしてください。

エディタでauthorized_keysを開いたら先ほどコピーした公開鍵をペーストします。PuTTYでログインしているのであればSHIFT+右クリックもしくはSHIFT+Insertキーで貼り付けることができます。貼り付けたら保存してエディタを終了します。

これで公開鍵の登録は完了です。

※公開鍵の登録についてはログインして登録するのではなくCGIなどによる登録用窓口を別途用意しているCVSサーバもあります(例:SourceForge)。そのようなサーバの場合にはそちらのドキュメントを参考にしてください。

PuTTYでの接続

公開鍵が登録できたらPuTTYで接続できるかどうかのテストを行います。

PuTTYを実行し設定ダイアログが開いたら、今度は左のツリーから接続/SSH/認証を選択して「認証のためのプライベートキーファイル」に先ほど作成して保存した秘密鍵ファイルを指定します。

そのあとセッションを選択し先ほどと同様に「ホスト名」にCVSサーバ名を入力して「開く」ボタンを押すと、CVSサーバに接続しに行きます。

今回はログイン名と先ほど指定した秘密鍵に設定したパスフレーズ(忘れてませんよね?)を入力します。これでログインできれば成功です。

パスフレーズではなくパスワードの入力を求められた場合には.sshディレクトリのパーミッションが間違っている可能性があります。他の人に読み取り可能になっていないか確認してください。

正しいパスフレーズを入力しているのにログインできない場合はauthorized_keysファイルの作成に失敗している可能性があります。ファイル名が正しいかどうか確認してください。

Pageantの設定

このままではSSH接続するために毎回秘密鍵を指定してパスフレーズを入力しなければいけません。またCVSから呼び出される際のSSHはウィンドウが開いてくれるとは限らないので、これらを指定したり入力できないかもしれません。そこでPageantという秘密鍵の指定とパスフレーズ入力を代行してくれるツールを利用します。

PuTTYと同じディレクトリにあるPageant.exeを実行するとタスクトレイにPageantのアイコンが追加されます。このアイコンを右クリックして出てくるメニューから鍵の追加を選び、作成した秘密鍵を選択します。

するとパスフレーズを入力するためのダイアログが出てきますのでここでパスフレーズを入力します。
蛭子屋版PageantではレジストリやINIファイルに入力したパスフレーズを記憶することもできますが、セキュリティを考えるとパスフレーズをどこかに保存してしまうのは危険です。できれば記憶させないようにしておきましょう。

これでPageantを起動している間はPageantに登録した秘密鍵を使うSSH接続には秘密鍵の指定やパスフレーズの入力が不要になります。

もう一度PuTTYを起動して今度は秘密鍵の指定をせずにCVSサーバに接続してみましょう。

今度はログイン名を入力するだけでログインできましたよね。

毎回Pageantを手動で起動するのは面倒なのでPageantはスタートアップに登録しておきましょう。こうすることでWindowsの起動時に自動的にPageantも起動します。パスフレーズを記憶させていなければPageantの起動時にまたパスフレーズを入力するためのダイアログが開きます。

CVSクライアントの設定

PuTTYを使ってSSH接続ができることまでは確認できました。次はCVSでSSH接続する設定をします。

WinCVSを使っているのであれば「WinCVSの設定」ダイアログのの「ポート設定」タブ、「使用するrshを指定する」のチェックをオンにしてputty.exeと同じディレクトリにあるplink.exeをフルパスで指定します。これでCVSへの接続にはplinkを使ってSSH接続するようになります。

Eclipseを使っている場合であれば設定ダイアログの「チーム/CVS/Ext 接続メソッド」で「CVS_RSH」にplink.exeをフルパスで指定します。その他の設定はデフォルトのままにしておきます。

その他のCVSクライアントを知らないのでどのように設定すればいいのかは分かりません。各CVSクライアントツールのドキュメントを参照して接続に使うrshの場所を指定する方法を探してください。そのrshにplink.exeを指定すればいいはずです。

リポジトリの場所の設定

次にCVSリポジトリを変更します。pserverの場合に使用していたCVSROOT指定をpserverからextに変更します。

例)
:pserver:sugoroku@yebisuya.dip.jp:/home/cvsroot
→:ext:sugoroku@yebisuya.dip.jp:/home/cvsroot

これでCVSサーバへの通信がPuTTYを使ったSSH接続になるはずです。チェックアウトや更新を実行してみましょう。

プロキシを通したSSH接続

PuTTYでは様々なプロキシ経由での接続が可能です。例えば社内LANから外部のネットワークへの接続にはHTTPプロキシhttp-gwの80番ポート経由で接続する必要があるような場合であれば、

「接続/Proxy」で「Proxyのタイプ」にHTTPを選択し「Proxyホスト」にプロキシのホスト名、ポートにプロキシが使用するポート番号を設定します。その後セッションに戻ってホスト名を入力した後、「保存されたセッション」にホスト名と同じ名前を入力し「保存」ボタンを押して設定を保存しておきましょう。次回からそのホスト名でのアクセスにはプロキシを経由するようになります。

投稿者 双六 : 2004年10月23日 07:02 | このエントリーのトラックバックURL
※ゑBLOGではこのブログへのリンクを含まないトラックバックを拒否しています。また、そのチェックのためトラックバックの送信中にタイムアウトを起こす可能性があります。トラックバックの送信に失敗したように見えても、しばらく待つと送信に成功していることがありますので、リロードするなどして確かめていただきますようお願いします。
コメント

>沖崎さん
私の環境(WindowsXP SP2)でもCPUが100%になる現象が発生します。
やはり2007年5月10日版に戻すと問題ありませんでした。

投稿者 ann : 2007年07月23日 11:32

>沖崎さん
私の環境(WindowsXP SP2)でもCPUが100%になる現象が発生します。
やはり2007年5月10日版に戻すと問題ありませんでした。

投稿者 ann : 2007年07月23日 11:32
コメントする









名前、アドレスを登録しますか?