背景
EC2キーペアはコンソールからも作れますが、CLIで作る方が自動化・スクリプト化に向いています。CLIでの作成から権限設定、複数鍵の管理方法までをまとめます。
1. キーペア作成は1コマンド
aws ec2 create-key-pair \
--key-name my-ec2-key \
--query 'KeyMaterial' \
--output text > ~/.ssh/my-ec2-key.pem
--query 'KeyMaterial'で秘密鍵の中身だけを抽出し、そのままファイルにリダイレクトしています。Windowsの場合はキャレット継続で書きます。
aws ec2 create-key-pair ^
--key-name my-ec2-key ^
--query "KeyMaterial" ^
--output text > %USERPROFILE%\.ssh\my-ec2-key.pem
2. 権限設定はOSで方法が違う
Mac/Linuxはchmodで一発ですが、WindowsはicaclsでACLを明示的に絞る必要があります。
# Mac/Linux
chmod 400 ~/.ssh/my-ec2-key.pem
:: Windows
icacls %USERPROFILE%\.ssh\my-ec2-key.pem /inheritance:r
icacls %USERPROFILE%\.ssh\my-ec2-key.pem /grant:r "%USERNAME%:R"
Windowsでこれをやらないと、SSH接続時にWARNING: UNPROTECTED PRIVATE KEY FILE!という警告が出ます。
3. 複数キーペアはSSH configで管理する
環境ごとに鍵を使い分ける場合、~/.ssh/configにホストを定義しておくと、ssh -i ~/.ssh/xxx.pem ec2-user@...を毎回打たずに済みます。
Host dev-ec2
HostName 54.123.45.67
User ec2-user
IdentityFile ~/.ssh/my-dev-key.pem
Host prod-ec2
HostName 54.234.56.78
User ec2-user
IdentityFile ~/.ssh/my-prod-key.pem
# 通常
ssh -i ~/.ssh/my-dev-key.pem ec2-user@54.123.45.67
# SSH config利用後
ssh dev-ec2
4. 削除してもローカルの.pemは残る
aws ec2 delete-key-pair --key-name my-ec2-key
AWS側のキーペアを削除しても、既存EC2インスタンスへの接続には影響しません。ただし新規インスタンスでは使えなくなります。ローカルの.pemファイルは自動削除されないので、不要なら手動で消す必要があります。
まとめ
キーペアはコンソールでも作れますが、CLIの方が自動化に向いています。Windows特有の権限設定(icacls)と、SSH configでの複数鍵管理を押さえておくと運用が楽になります。