第3回 Windows で Capistrano

2008/03/26

前回「SSH 公開鍵の設置」では、Linux や Mac OS X で、Capistrano を使うための準備作業について書いた。
今回は、その Windows 編だ。

Capistrano は、Ruby の Net::SSH モジュールを使ってリモートサーバにログインする。したがって、基本的には、ssh クライアントプログラムは必要ない。

あなたのパソコンの適当なフォルダに、次のような内容のファイル Capfile を作る。

task :stamp, :hosts => "alpha.oiax.jp" do
  run "touch /home/kuroda/touched"
end

そして、stamp タスクを実行する。

% cap stamp
  * executing `stamp'
  * executing "touch /home/kuroda/touched"
Password:
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
    command finished

途中でパスワードを尋ねられる点を除けば、前回の記事と同じである。

Windows で、公開鍵による SSH ログインを実現するには、PuTTY というフリーソフトウェアを利用する。
PuTTY Download Page から putty-x.xx-installer.exe をダウンロードして、インストールする。

まず、puttygen プログラムを起動して、SSH 鍵を作り、秘密鍵を保存し、公開鍵をリモートサーバの authorized_keys ファイルに追加する。詳しくは、PuTTYgen の利用 を参照のこと。ただし、/home/app/.ssh/authorized_keys ファイルにも公開鍵を追加することを忘れないように。

次に pageant プログラムを起動する。このプログラムは常駐型であり、起動するとタスクトレイに帽子をかぶったパソコンのアイコンが現れる。このアイコンをダブルクリックすると、「Pageant Key List」というウィンドウが開くので、[Add Key] ボタンをクリックして、先ほど保存した秘密鍵のファイルを選んで、鍵を pageant に登録する。

この手順を Windows 起動後に一度だけやっておくと、Capistrano 実行時にパスワードを入力しなくても済むようになる。

% cap stamp
  * executing `stamp'
  * executing "touch /home/kuroda/touched"
    servers: ["alpha.oiax.jp"]
    [alpha.oiax.jp] executing command
    command finished

この文章を執筆した当時の Capistrano 2.3.0 では問題が出なかったが、2010年3月30日現在の最新版 Capistrano 2.5.18 は pageant と相性が悪く、can't convert Net::SSH::Authentication::Pageant::Socket into IO (TypeError) というエラーメッセージを表示して止まってしまう。このバグは少なくとも2008年12月には認識されているが、対応される気配はない。Windows ユーザーは pageant を使わないか、古い Capistrano 2.3.0 を使用するか、どちらかを選ぶしか対処方法はなさそうだ。

2010年8月10日、改めて Windows から pageant と Capistrano 2.5.19 を利用してみたところ、知人の環境ではうまく行かず(上記の注と同じ症状)、私の環境では問題が発生しなかった。どちらも Windows XP で、PuTTY のバージョンも同じ 0.60。違いはよく分からない。net-ssh の lighthouse に Ticket #13 として登録されているバグが関係しているようだ。net-ssh の founder である Delano Mandelbaum は「俺は積極的に Windows をサポートはしないが、(テスト付きの)パッチなら喜んで受け入れる」と言っているので、誰か Windows に詳しくて元気のある Ruby プログラマーが直してくれないだろうか。


[改訂] 2008/05/17 ユーザー app でリモートホストにログインする方式に合わせて記述を修正。
[改訂] 2010/03/30 pageant との相性に関する注を追加。
[改訂] 2010/08/10 pageant との相性に関する注を更に追加。