通常の ssh ライクな引数で簡単に EC2 にログインできるようなスクリプトを書いた
ec2ssh
Requirements
環境変数にこれ追加したほうがいいかも。
export AWS_SDK_LOAD_CONFIG=1
sudo gem install aws-sdk wget https://gist.githubusercontent.com/ishikuro/aca4afc01f96b9c4346b6623696d88dd/raw/4acf0f135d257ade0ae88f4fa44db51abd72605f/ec2ssh chmod u+x ec2ssh
Usage
ec2ssh [-l username] [-p port_number] [-r region] [-i identity_file] [-q] [--profile profile] [--dry-run] [username@]instance[:port_number] [command]
- -l username or username@
- 省略した場合は tag:User を自動的に使用する。tag:User も無いときはデフォルト値として ec2-user が使われる。
- -p port_number or :port_number
- 省略した場合はデフォルト値 22 が使われる
- -r region
- -i identity_file
- キーペアのファイルを指定する。ssh で適切にデフォルトが設定されているならば省略してもよい。
- -q
- quiet mode / セキュリティグループの設定警告や実行予定の ssh コマンドを出力しない。
- --profile profile
- --dry-run
- 実際には実行しない。インスタンスのユーザ名、IP アドレスを知りたいだけのときに有用。
- instance
- command
- ssh の引数として渡せる、リモートで実行したいコマンド
Examples
$ ec2ssh MyInstanceA # => ssh ec2-user@203.0.113.1 # インスタンスの User タグがあればそちらを拾ってユーザ名にしてくれる # User タグが無ければ ec2-user $ ec2ssh i-xxxxxxxxxxx # => ssh ec2-user@203.0.113.1 # i- で始まる文字列にするとインスタンス ID と見なす $ ec2ssh ubuntu@MyInstanceB # => ssh ubuntu@203.0.113.2 $ ec2ssh -l ubuntu MyInstanceB # => ssh ubuntu@203.0.113.2 # このようにしてユーザ名は上書き可能 $ ec2ssh -r us-east-1 MyInstanceC # => ssh centos@203.0.113.3 # リージョン指定可能 $ ec2ssh -i ./my.pem ubuntu@MyInstanceB:10022 # => ssh -i ./my.pem -p 10022 ubuntu@203.0.113.2 $ ec2ssh -i ./my.pem -l centos -p 10022 -r us-east-1 MyInstanceC # => ssh -i ./my.pem -p 10022 centos@203.0.113.3
おまけ機能として、デフォルトでセキュリティグループ許可し忘れがないか警告してくれる。リンク先は当該インスタンスに紐づいたセキュリティグループでフィルタされたコンソール。出力不要な場合は -q で抑止できる。
$ ec2ssh MyInstanceA If you cannot see the login prompt, check security group settings by https://ap-northeast-1.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-1#SecurityGroups:groupId=sg-xxxxxx,sg-yyyyyy;sort=groupId ⚡️ ssh -p 22 centos@3.xx.xx.xx
未実装
コマンド実行 ssh host ls みたいなやつ警告を出力しない、quietモード(-q)- scp モード
region 設定が無いときに us-east-1 を使うようにする- credential エラーの対応
ec2ls
マネジメントコンソールを開かなくてもログインに必要な手がかりを一覧できるようなコマンドも作ってみた。併用すれば捗るはず。
ec2ls [-r region] [--profile profile] [-l]
AMI 名は先頭数文字だけ表示するようにした。ログインユーザ名を知るにはこれで十分。
$ ec2ls i-xxxxxxxxxxxxxxxxxxx running CentOS# Member i-xxxxxxxxxxxxxxxxxxx running Window# Admin i-xxxxxxxxxxxxxxxxxxx stopped amzn2-# WORK_AL2 i-xxxxxxxxxxxxxxxxxxx running ubuntu# IoT i-xxxxxxxxxxxxxxxxxxx running amzn-a# Greengrass $ ec2ls -l i-xxxxxxxxxxxxxxxxxxx running CentOS# Member Directory/DirectoryPublic1a(192.168.0.0/24) i-xxxxxxxxxxxxxxxxxxx running Window# Admin Directory/DirectoryPublic1a(192.168.0.0/24) i-xxxxxxxxxxxxxxxxxxx stopped amzn2-# WORK_AL2 default/DefaultPublic1a(172.31.16.0/20) i-xxxxxxxxxxxxxxxxxxx running ubuntu# IoT default/DefaultPublic1a(172.31.16.0/20) i-xxxxxxxxxxxxxxxxxxx running amzn-a# Greengrass default/DefaultPublic1a(172.31.16.0/20)
真面目に VPC, サブネット順にソートしたりしてるんだよ。