以前、「SSM Session Manager 経由での SSH」で、Public IP address を持たない EC2 Instance に対して SSH 接続する方法を確認したが、SSM の Session Manager だけでは事前に EC2 Instance 側に Public Key が登録されている必要があった。
しかし、今回 Public Key の登録されていない Instance に SSH したくなった。確か、一時的な Public Key を登録する機能があったよな、ということでメモっておく。
一時的な Public Key を送った後に Session Manger を使って接続すれば今回やりたいことができる。
Public Key の登録は aws ec2-instance-connect send-ssh-public-key コマンドで行う。
aws ec2-instance-connect send-ssh-public-key \
--instance-id i-xxxxxxxxxxxxxxxxx \
--instance-os-user ec2-user \
--availability-zone ap-northeast-1c \
--ssh-public-key file://$HOME/.ssh/id_rsa.pubわざわざ --availability-zone を指定しなくてはならないというのが面倒だが Instance Id から取ってくる wrapper を書く。
aws ec2 describe-instances \
--instance-ids i-xxxxxxxxxxxxxxxxx \
--query 'Reservations[0].Instances[0].Placement.AvailabilityZone' \
--output textsend-ssh-public-key で登録した Public Key は 60 秒間だけ有効なのでその間に SSM の Session Manager で接続します。これは「SSM Session Manager 経由での SSH」で書いた通りで ~/.ssh/config に次の様に書いておけば ssh ec2-user@i-xxxxxxxxxxxxxxxxx で接続できます。
host i-* mi-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"とりあえずこんな wrapper で
| |

