第2回 SSH 公開鍵の設置
2008/03/25
今回は Capistrano を使うための前提条件の一つである SSH について。
本番サーバは用意されているという前提だから、あなたは既に SSH で本番サーバにログインできるはずだ。しかし、SSH の公開鍵を作って本番サーバに設置してあるだろうか。もしまだなら、そこから作業開始だ。
ただし、Windows から Capistrano を使うためのセットアップ方法については、次回(第3回 Windows で Capistrano)で説明する。
まず、SSH の公開鍵を作る。
% ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/kuroda/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/kuroda/.ssh/id_rsa. Your public key has been saved in /home/kuroda/.ssh/id_rsa.pub. The key fingerprint is: a3:ed:8b:aa:6d:6c:92:16:70:6b:1d:51:3a:24:6f:b9 kuroda@desktop
次に、公開鍵を本番サーバにコピーする。本番サーバのドメイン名を alpha.oiax.jp としよう。
% scp .ssh/id_rsa.pub alpha.oiax.jp:~ kuroda@alpha.oiax.jp's password:
本番サーバにログインする。なお、今後はローカルホストで作業するときのプロンプトは % で、リモートホスト(本番サーバ)で作業するときのプロンプトは $ で表すことにする。
% ssh alpha.oiax.jp Password:
最初に app ユーザーを作る。
% sudo /usr/sbin/useradd -m app
これは Rails アプリケーションをデプロイメントし起動するための専用ユーザーである。もし、すでにこのユーザー名が他の目的で作られていたら、rails などの別の名前を選ぶ。なお、開発者個人のアカウント(例えば、kuroda)でデプロイメントする方法もあるが、複数人で開発している場合は、ファイルのパーミッションに関係するややこしい問題に遭遇しやすいので専用のユーザーを作ることをお勧めする。
まず ~/.ssh に公開鍵を設置する。
$ mkdir -m 700 .ssh $ cat id_rsa.pub >> .ssh/authorized_keys
続いて /home/app/.ssh に公開鍵を設置する。
$ sudo -u app mkdir -m 700 /home/app/.ssh $ sudo -u app touch /home/app/.ssh/authorized_keys $ sudo sh -c "cat id_rsa.pub >> /home/app/.ssh/authorized_keys"
ログアウトする。
$ exit
パスフレーズを繰り返し入力する手間を省きたい人は、次のようにして ssh-agent に秘密鍵を記憶させる。
% ssh-agent bash % ssh-add Enter passphrase for /home/kuroda/.ssh/id_rsa: Identity added: /home/kuroda/.ssh/id_rsa (/home/kuroda/.ssh/id_rsa)
公開鍵で本番サーバにログインする。
% ssh alpha.oiax.jp $ exit
ログイン時にパスワードを尋ねられなければ、OKだ。
次に、app ユーザーでログインする。
% ssh app@alpha.oiax.jp $ exit
こちらもパスワードの入力なしでログインできるはずだ。
では、Capistrano を試してみよう。
ローカルホストの適当なディレクトリに、次のような内容を持つテキストファイル Capfile を作成する。拡張子は付けないこと。また、'kuroda' の部分は、リモートホストに SSH でログインするユーザー名を指定し、'alpha.oiax.jp' は、実際のリモートホストの名前で置き換えること。
set :user, 'kuroda' task :stamp, :hosts => "alpha.oiax.jp" do run "touch /home/kuroda/touched" end
これで、alpha.oiax.jp にログインして、コマンド touch /home/kuroda/touched
を実行するタスク stamp を定義したことになる。Unix コマンドの touch
は、ファイルのタイムスタンプを更新するものだが、ファイルがなければ新規に作成してくれる。
stamp タスクを実行するには、Capfile を保存したディレクトリに移動して、cap stamp
と入力する。
% cap stamp * executing `stamp' * executing "touch /home/kuroda/touched" servers: ["alpha.oiax.jp"] [alpha.oiax.jp] executing command command finished
本番サーバで結果を確認する。
$ pwd /home/kuroda $ la -l touched -rw-r--r-- 1 kuroda kuroda 5 Mar 24 22:58 touched
stamp タスクを実行するまでは存在しなかった touched ファイルが生成された。
[改訂] 2008/05/17 ユーザー app でリモートホストにログインする方式に合わせて記述を修正。