前置き
- SessionManagerを用いたSSH接続が利用できる環境
- AWSアカウント複数持ちで、プロファイル毎に管理している場合
- InstanceIDが動的で、いちいち調べるのが面倒な場合
- とりあえず、同ネームタグの起動しているどのサーバーでもいいから接続したい場合
InstanceIDを調べずに、サーバー接続できるスクリプトのご紹介です。
このスクリプトを設定したら以下のコマンドだけでssm接続できます。
> ssh ssm.[プロファイル名].[ネームタグ名]
設定方法
(Git For Windows の GitBashで検証しました。クライアント環境に合わせて調整してください)
■ 1. ファイルを配置する
[ユーザー]/bin/
フォルダに以下のコードをファイルとして配置する。
※パスの通ったフォルダであればどこでも大丈夫です。
ファイル名:aws-ssm.sh
#!/bin/bash
# AWS-SSM ProxyCommand
# Configure to ssh_config
#
# ------------------------------
# Host ssm.*
# ProxyCommand aws-ssm.sh %h %p
# User ec2-user
# ------------------------------
#
# SSH Command: ssh ssm.[Profile].[NameTag]
HOST_STR=$1
HOST_ARR=(${HOST_STR//./ })
INSTANCE_ID=$(aws --profile ${HOST_ARR[1]} ec2 describe-instances --filters "Name=tag-value,Values=${HOST_ARR[2]}" "Name=instance-state-name,Values=running" --query "Reservations[0].Instances[0].InstanceId")
INSTANCE_ID=${INSTANCE_ID//\"/}
aws ssm start-session --profile ${HOST_ARR[1]} --target ${INSTANCE_ID} --document-name AWS-StartSSHSession --parameters "portNumber=$2"
■ 2. configファイルを追記する
[ユーザー]/.ssh/config
ファイルに以下の記述を追記する
Host ssm.*
ProxyCommand aws-ssm.sh %h %p
User ec2-user
ユーザー・ポートや鍵の指定等は環境に合ったものへオーバーライド等して下さい。
Host ssm.[プロファイル名].*
<<その他設定>>
注意事項
「.」ドット区切りで分割しているので、既にプロファイル名やネームタグにドットが含まれる場合は別な記号で分割する様に調整が必要となります。
もっと効率のいいものがあれば教えて下さい。