背景
EC2インスタンスを立ててElasticIPつけてSSHで接続する。
これをよくやるんですけどたまにしか使わないやつだけど消すまでじゃないやつとかシャットダウンするじゃないですか?
そうするとEIPが密かに金取っていくじゃないですか?
だからEIP開放するじゃないですか?
また使うときに違うEIPになるじゃないですか。
EIP書き直すのめんどくせ。
やること
バッチファイルでAWSCLI実行させてEIP取得してteratermマクロで接続する
環境
OS : Windows10
ターミナル ; cmder
事前準備
2 . IAMでユーザー作成
既存のでもいいです。「EC2readonly」権限だけあれば良いです。
3 . 2のユーザーでアクセスキーを発行
ソース
EIPを取得するバッチファイル
@echo of cd /d %~dp0 aws ec2 --profile [アクセスキーファイル] describe-instances --filters "Name=tag:Name,Values=%1" --query "Reservations[*].Instances[*].PublicIpAddress" --output text > ip.txt
バッチはこんな感じで出力されてます
server1 53.xx.xx.xx server2 10.xx.xx.xx server3 13.x.x.x
アクセスキーファイルの作り方
aws configure --profile sample AWS Access Key ID [None]: XXXXXXXXXXXXXXXX AWS Secret Access Key [None]: XXXXXXXXXXXXXXXX Default region name [None]: ap-northeast-1 Default output format [None]: json
TeraTermマクロ
・EIP取得するバッチファイルのパスは適宜変更
・接続するインスタンス名も適宜(インスタンス名はユニークな事)
・秘密鍵へのパスも適宜変更
; バッチを実行してEIP取得 exec 'cmd /c c:\path\to\bat\get_ec2_ip.bat [接続先インスタンス名] ' ; EIP取得までの時間待ち(これないとEIP取得前に接続しようとしてエラー) ;時間は環境によって要調整 pause 2 fileopen FH 'ip.txt' 0 0 filereadln FH HOST_ADDR fileclose FH ; ユーザ名/秘密鍵を設定 USER_NAME = 'ec2-user' getenv 'HOME' KEY_FILE strconcat KEY_FILE 'C:\path\to\key.pem' strconcat COMMAND ':22 /ssh /2 /auth=publickey /user=' strconcat COMMAND USER_NAME strconcat COMMAND ' /keyfile="' strconcat COMMAND KEY_FILE ; サーバへ接続 connect COMMAND end
これでTeraTermマクロ実行するとバッチが実行してEIP取得してそのIPに接続されます。
ハマったこと
Cmderで作業しててこっちからはバッチを正常に実行できるけどバッチをダブルクリックで実行するとエラーになる状況でした。
原因はバッチ直で実行する場合にアクセスキーが設定されてませんでした。
Cmderではaws configureから設定してたんですけど。。 bash環境との違いですかね。。。
そんなわけで--profileで指定するようにしました。
ソースはココ
GitHub - piyoji333/ssh-teraterm
以上