はじめに
バッチファイル内でコマンドの実行結果を複数の変数に取りだし利用する - Qiita
https://qiita.com/SECUAL_masa/items/a9a17e78e935ddb1be47
上記の記事の最後でも書いたが、実際にやりたかったことを記事にして公開する。
やりたかったこと
WindowsからAWSのSession Managerを利用して目的のインスタンスにSSH接続。
注意事項
Windowsでaws cliを環境変数(AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_DEFAULT_REGION)を駆使して利用されている場合は既存の設定がクリアされてしまうので注意すること。
コード
@echo off
set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=
set AWS_DEFAULT_REGION=ap-northeast-1
set USERNAME="username"
set AUTHCODE=
set /p AUTHCODE=Please input authentication code:
for /f "tokens=1-5 usebackq" %%i in (`aws sts get-session-token --serial-number "arn:aws:iam::nnnnnnnnnnnn:mfa/%USERNAME%" --output text --token-code "%AUTHCODE%"`) do (
@set AWS_ACCESS_KEY_ID=%%j
@set AWS_SECRET_ACCESS_KEY=%%l
@set AWS_SESSION_TOKEN=%%m
)
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx
set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=
set AWS_DEFAULT_REGION=ap-northeast-1
ピックアップ
もうこの記事で書くことはあまりないけど以下だけ。
環境変数の初期化とクリア
set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=
set AWS_DEFAULT_REGION=ap-northeast-1
不本意なID/KEYで接続いってもいけないので初期化して、最後に使い終わったらクリアのために。
Session Manager のコマンド例
上記コードにある
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx
の部分。これを↓に変更するとポートフォワードが可能になる。
日本語のサイトにあるコマンド構文だと"localPortNumber"でエラーになったので以下の構文にする必要がある。(日本語サイトから言語を英語に切り替えた後に表示されるページの構文でもエラーになったので注意)
HTTP
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["80"],"localPortNumber"=["8080"]
SSH
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["22"],"localPortNumber"=["8022"]
以下の記事にもあるが、私はTera Term使いなのでSession Managerを駆使しつついつものTera Termが使えるので便利。(ファイル転送もD&D!)
Tera Termの便利な機能(自動ログ採取、ログ表示、ファイル送受信、接続先のリスト表示、同時操作) - Qiita
https://qiita.com/SECUAL_masa/items/afed756a05c893a3651e