Overview
毎回 AWS コンソールから EC2 インスタンスを起動してSSH接続するのは面倒なので、CLIから簡単に操作できるようにする
また、再起動ごとに接続先ホストが変わるため、1 command で確認と接続ができるようにする
In short
SSH config の記述
Host ec2-connect IdentityFile ~/.ssh/{your-key} LocalForward {local_port} {remote_host}:{remote_port} User {your-user} StrictHostKeyChecking no UserKnownHostsFile /dev/null
インスタンスを起動
aws ec2 start-instances --instance-ids {your_instance_id}
ホスト名を確認して接続
ssh ec2-connect -o HostName=$(aws ec2 describe-instances \--instance-ids {your_instance_id} \--query "Reservations[0].Instances[0].PublicDnsName" \--output text --no-cli-pager)
Detail
事前に AWS CLI の接続設定や EC2 インスタンスの作成、秘密鍵の設定もろもろは完了している前提
SSH 接続
SSH config を書いておく
今回は毎回ホスト名が変わってしまうので、HostKey の確認はスキップし Known Hosts に保存しないようにする
あんまり良くないので良い子は真似しないこと
Host ec2-connect # 任意のホスト名 IdentityFile ~/.ssh/{your_key} # 秘密鍵のパス User {your-user} # 接続先インスタンスのユーザ名(例: ubuntu, ec2-user など) StrictHostKeyChecking no # ホストキーの確認をスキップ UserKnownHostsFile /dev/null # Known Hosts ファイルを無効化
ポートフォワーディングを設定する場合は、下記を追加
LocalForward {local_port} {remote_host}:{remote_port}
SSH config で設定したホスト名に、起動中の EC2 インスタンスのホスト名を設定して接続
-o
オプションは既存の SSH config の設定を上書きするために使用する
今回は HostName を上書き
ssh ec2-connect -o HostName={your_host_name}
インスタンス起動
インスタンスIDを指定して起動する
インスタンスIDは変わらないので(それはそう)どこかにメモしておく
aws ec2 start-instances --instance-ids {your_instance_id}
ホスト名確認
接続する DNS ホスト名を確認する
DNS ホスト名は毎回変わるので、インスタンス起動後に確認する必要がある
ご丁寧に paginated で出力されるので、--no-cli-pager
オプションを付けて標準出力に出す
aws ec2 describe-instances \--instance-ids {your_instance_id} \--query "Reservations[0].Instances[0].PublicDnsName" \--output text --no-cli-pager
1 command でホスト名確認と接続
上述のコマンドを合体、完成!
ssh ec2-connect -o HostName=$(aws ec2 describe-instances \--instance-ids {your_instance_id} \--query "Reservations[0].Instances[0].PublicDnsName" \--output text --no-cli-pager)