Gradle で Amazon EC2 に公開鍵をアップロードしてみる

Amazon EC2 では インスタンス生成時 もしくは その前に Key Pair を生成して クライアントに秘密鍵をダウンロードします。
EC2 インスタンスには その秘密鍵を使って SSH でログインするのですが、 実は その行為に 今まで ずっと違和感を感じていました。

と言うのも...
秘密鍵は 生成した端末にそっとしておき、公開鍵をサーバーにアップロードするべきだと思っていたので、 たとえ HTTPS で暗号化通信していたとしても、インターネット経由でダウンロードするというのは、あまり健全な行為とは思えなかったからです。

ところが Amazon EC2 でも AWS API を使えば、あらかじめクライアント側で作成した Key Pair の公開鍵を EC2 上にアップロードできるという情報を JAWS-UG Nagoya勉強会 第1回 で得たので 早速試してみました。
もちろん 前回の続きで Gradle で...

しかも この API を使えば、全てのリージョンに 同じ公開鍵をアップロードできるので とっても便利です。
デフォルト名 (id_rsa) の秘密鍵を使うのであれば

ssh -i ~/.ssh/ec2-ap-southeast.pem ec2-user@ec2.public.dns.name
のように リージョン毎に別々の秘密鍵を指定しなくても
ssh ec2-user@ec2.public.dns.name
だけでよくなります。

と言うことで...
早速 Gradle を使って EC2 に公開鍵をアップロードしてみましょう。
もちろん、端末には あらかじめ Key Pair が生成されていることが前提です。
また、AWS のアクセスキーの設定については 前回のエントリーを参照してください。

用意する build.gradle はこんな感じ...


あとは

gradle -PkeyName=bluepapa32@HOME -PpublicKeyFile=$HOME/.ssh/id_rsa.pub ec2-import-keypair
のように
  • keyName
  • publicKeyFile
を指定して実行するだけです。
実行したら、実際にアップロードされたか AWS Management Console で確認してみましょう。