Amazon EC2インスタンスに簡単にSSHできるようになるツールec2sshを公開しました

みんなが大好きなクラウドホスティングサービスのAmazon EC2ですが、インスタンスをバンバン立てたり落としたりしていると、ホスト名の管理が面倒になってきますよね。たとえば「さっき立てたインスタンスSSHしたい!」と思ったら、consoleをひらいて、「ec2-xxx-xxx-xxx-xxx.compute.us-west-1.compute.amazonaws.com」なPublicDNSをターミナルにコピペして…みたいな面倒な事をやってしまいがちです。
これを避けるためには、~/.ssh/configをマメに更新したりするといいのですが、これはなかなか面倒な作業です。インスタンスは一旦StopしてRunし直すと、IPが変わってしまいますからね。

そこでec2sshの登場です

ec2sshは、インスタンスのNameタグからホスト名を生成して、~/.ssh/configに書きこむツールです。使い方を説明します。

1. インスタンスにNameタグを付ける

AWS Consoleなどを使って、インスタンスにNameタグを付けます。ここで付けたタグがホスト名に使われます。
f:id:mirakui:20101205202923p:image
ここではapp-server-1という名前にしました。
f:id:mirakui:20101205202924p:image

2. ec2sshのインストール

ec2sshはrubygemsからインストールできます。

gem install ec2ssh
3. 環境変数を設定

環境変数にAWSのアクセスキーを設定します。

export AMAZON_ACCESS_KEY_ID="..."
export AMAZON_SECRET_ACCESS_KEY="..."

ちなみに、アクセスキーは以下のURLから確認できます。
https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&action=access-key
f:id:mirakui:20101205202925p:image
ここ。

4. init と update

※以下のコマンドは ~/.ssh/config に記述を追加します。既存の設定は破壊しないはずですが、念の為に~/.ssh/config のバックアップをしておくことをおすすめします。


まず init をします。

ec2ssh init

これで、~/.ssh/config の末尾に以下のコメント行が追加されます。

### EC2SSH BEGIN ###
# Generated by ec2ssh http://github.com/mirakui/ec2ssh
# DO NOT edit this block!
# Updated Sun Dec 05 00:00:14 +0900 2010
### EC2SSH END ###

次に update をします。

ec2ssh update

これで先程の BEGIN と END の間に Host の設定が追加されます。

### EC2SSH BEGIN ###
# Generated by ec2ssh http://github.com/mirakui/ec2ssh
# DO NOT edit this block!
# Updated Sun Dec 05 00:00:14 +0900 2010
Host app-server-1.ap-southeast-1
  HostName ec2-xxx-xxx-xxx-xxx.ap-southeast-1.compute.amazonaws.com
### EC2SSH END ###

これで、

ssh app-server-1.ap-southeast-1

みたいな感じでsshできます。zshならappあたりまで打ってtabキーで補完できちゃうので便利です。
IPが変わったり、新しいインスタンスを追加したりしたら ec2ssh update で最新の状態に更新できます。
また、要らなくなったら ec2ssh remove すれば、追加した Host 設定を消して元の .ssh/config に戻ります。

ソースコード

githubに上げてあります。
https://github.com/mirakui/ec2ssh
要望はgithubでお願いします! pull requestもお待ちしております。