[AWS]EC2へのsshアクセスを少し楽にする[ec2-ssh]

2013.06.24

EC2でsshアクセスはよく使います

最近、仕事でEC2を使用する機会が非常にふえました。EC2にsshログインして作業をすることもよくあるのですが、
インスタンス数の増加にしたがって、EC2のホスト名を管理するのも面倒になってきます。

通常、ホスト名管理が面倒な場合はconfigファイルに次のようにホスト名の別名を定義すれば楽です。

#~/.ssh/config
Host sample-host
Hostname ec2-xxx-xxx-xxx-xxx.amazonaws.com

上記configがあれば、下記のようにEC2へsshログイン可能です。

% ssh -i <キーファイル> ec2-user@sample-host

しかし、インスタンスを起動したり消したりしていると、当然ながらec2-xxx〜なホスト名は変わってしまいます。
EIPを使えば固定しておけますが、開発の時やAutoScaleで動的にインスタンスが変わる場合等、
いちいちすべてのEC2にEIPを割り当てるのも面倒です。
となると、AWSコンソールでインスタンスを確認して、新しいホスト名を確認してそれをまたconfigに書いて・・という無駄な作業を繰り返すことになってしまいます。

そういったケースで役立つのが、今回紹介するec2sshです。
けっこう前からあるツールみたいなのですが、これを使えば、EC2のNameタグからホスト名を取得してsshのconfigに書きこんでくれます。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.5
  • ruby : 2.0.0pre195
  • gem : 2.0.3

ec2sshはgemで簡単にインストールできます。
※私の環境ではRubyが1.8のままほったらかしだったので、最初インストールに失敗しました・・

% sudo gem install ec2ssh

ec2sshを使ってみる

インストールが完了したら、次の環境変数を設定し、initコマンドを実行しましょう。

% export AMAZON_ACCESS_KEY_ID="<アクセスキー>"
% export AMAZON_SECRET_ACCESS_KEY="<シークレットキー>"	
% ec2ssh init

すると、ホームディレクトリに.ec2sshファイルが作成されます。
このファイルを元にsshのconfigファイルが更新されます。

---
path: /path/your/.ssh/config
aws_keys:
  default:
    access_key_id: <アクセスキー>
    secret_access_key: <シークレットキー>
regions:
- ap-northeast-1

設定が問題なければ、updateコマンドを実行してconfigファイルを更新しましょう。

% ec2ssh update

更新されたconfigファイルを見てみましょう。既存設定の下に、AWSアカウントに紐付いたEC2インスタンスが登録されています。

・
・
### EC2SSH BEGIN ###
# Generated by ec2ssh http://github.com/mirakui/ec2ssh
# DO NOT edit this block!
# Updated xxx
# section: default
Host myec2-1.ap-northeast-1
  HostName ec2-xxx.xxx.xxx.xxx.amazonaws.com
Host myec2-2.ap-northeast-1
  HostName ec2-xxx.xxx.xxx.xxx.amazonaws.com
・
・

configが更新されれば、あとはsshで普通にログインできます。

% ssh -i <キーファイル> ec2-user@myec2-1.ap-northeast-1

また、ec2sshは複数のAWSアカウントにも対応しています。次のように.ec2sshを記述すれば、複数のAWSアカウントを登録できます。

---
path: /path/your/.ssh/config
aws_keys:
  default:
    access_key_id: <アクセスキー1>
    secret_access_key: <シークレットキー1>
  myProject-Key:
    access_key_id: <アクセスキー2>
    secret_access_key: <シークレットキー2>
regions:
- ap-northeast-1

configを更新する場合、更新したいキーを指定します。

% ec2ssh update --aws-key myProject-Key

ec2sshの情報をconfigから削除したい場合、removeコマンドで元に戻ります。

% ec2ssh remove

まとめ

複数アカウント/複数インスタンスを使用する場合、こういったツールで少しでも楽したいですね。
欲を言えばUserとかIdentityFileとかも.ec2sshに設定できたら最高なんですが、いまのところは無理みたいです。
(できるようにしているGithubのforkもありましたが)
私の場合、とりあえず次のようにaliasを設定してホスト名だけでアクセスできるようにしてます。

% alias awsssh="ssh -i <sshキーのパス> -l ec2-user"
% ssh myec2-1.ap-northeast-1

参考サイトなど