この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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
参考サイトなど
- Github: https://github.com/mirakui/ec2ssh
- ec2-ssh紹介記事: http://blog.mirakui.com/entry/20101205/1291551625