最初のインスタンスの起動後に SSH キーペアを紛失した場合に、Amazon EC2 インスタンスに接続する方法を教えてください。
Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続したいのですが、SSH キーペアを紛失しました。
簡単な説明
SSH キーペアを紛失した状態で EC2 インスタンスに接続するには、次のいずれかの方法を使用します。
- ユーザーデータを入力して新しいキーペアを作成します。
- マネージドノードであるインスタンスでは、AWS Systems Manager を使用してキーペアを復元します。
- Amazon Linux 2 (AL2) バージョン 2.0.20190618 以降または Amazon Linux 2023 (AL2023) を実行するインスタンスでは、EC2 Instance Connect を使用します。
- インスタンスがアクセス可能であり、EC2 シリアルコンソールへのアクセス許可がある場合は、シリアルコンソールを使用します。
注: この方法では、インスタンスを停止して起動する必要はありません。 - レスキューインスタンスを作成して新しいパブリックキーを作成します。
重要: インスタンスを停止して起動する前に、次の手順を実行してください。
- Amazon Elastic Block Store (Amazon EBS) ボリュームのバックアップを作成します。
注: インスタンスの基盤がインスタンスストアであるか、データを含むインスタンスストアボリュームがある場合、インスタンスの停止時に Amazon EC2 はデータを削除します。 - インスタンスのシャットダウン動作を Stop に設定し、インスタンスの停止時にインスタンスが破棄されないようにします。
注: インスタンスを停止または起動する際、インスタンスのパブリック IP アドレスは変更されます。外部トラフィックをインスタンスにルーティングするには、パブリック IP アドレスではなく Elastic IP アドレスを使用することをおすすめします。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ユーザーデータスクリプトを入力する
重要: 機密データをユーザーデータスクリプトに保存しないでください。代わりに、AWS Secrets Manager などの安全な方法を使用してください。
インスタンスが cloud-init にアクセスできないか、cloud-init で問題が発生した場合は、「レスキューインスタンスを使用する」に進んでください。
新しいキーペアを作成する
次の手順を実行します。
- 新しいキーペアを作成します。
- Amazon EC2 コンソールでプライベートキーを作成する場合は、キーペアのパブリックキーを取得します。
- Amazon EC2 コンソールを開きます。
- インスタンスを停止します。
- [アクション] を選択し、[インスタンス設定] を選択します。
- [ユーザーデータを編集] を選択し、次のスクリプトを入力します。
注: username を デフォルトユーザー名または作成したカスタムユーザー名に置き換えてください。PublicKeypair をパブリックキーに置き換えてください。パブリックキーの全文を入力する際、先頭は ssh-rsa である必要があります。Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [users-groups, once] users: - name: username ssh-authorized-keys: - PublicKeypair - [保存] を選択します。
- インスタンスを起動します。
cloud-init フェーズが完了したことを確認する
インスタンスコンソールの出力で次の要素を参照し、cloud-init フェーズが完了したことを確認します。
- エラーメッセージは表示されないこと。
- すべての cloud-init ディレクティブは Executed と表示されること。
- cloud-init の Finished メッセージ例を次に示します。 「Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v.A.B.C finished at ..」
インスタンスのユーザーデータからコマンドを削除する
次の手順を実行します。
- インスタンスを停止します。
- [アクション] を選択し、[インスタンス設定] を選択します。
- [ユーザーデータの編集] を選択し、フィールドからすべての内容を消去します。
- [保存] を選択します。
- インスタンスを起動します。
Systems Manager を使用する
Systems Manager でマネージドノードであるインスタンスを復旧するには、AWSSupport-ResetAccess ランブックを使用してキーペアを復元します。AWSSupport-ResetAccess は、EC2Rescue を使用して新しい SSH キーペアを自動的に生成し、インスタンスに追加します。
Systems Manager は、インスタンスの新しい SSH プライベートキーを暗号化し、AWS Systems Manager の機能である Parameter Store に /ec2rl/openssh/instance_id/key として保存します。
Parameter Store からプライベート SSH キーを取得するには、AWS CLI コマンド get-parameters を実行します。
aws ssm get-parameters --names "/ec2rl/openssh/instance_id/key" --with-decryption --output json --query "Parameters[0].Value" | sed 's:\\n:\n:g; s:^"::; s:"$::' > key-pair-name
注: 実際のものでそれぞれ、instance_id をインスタンス ID に、key-pair-name をキーペアの名前に置き換えます。
次に、パラメータの値を内容に含む新しい .pem ファイルを作成します。この .pem ファイルを使用してアクセスできないインスタンスに再接続します。
次のコマンドを実行し、プライベートキーを .pem ファイルに変換します。
ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem
注: key-pair-name を実際のキーペアの名前に置き換えます。
オートメーションランブックは、パスワード対応のバックアップ Amazon マシンイメージ (AMI) を作成します。Amazon EC2 は新しい AMI を自動的に削除しないため、AMI は AWS アカウントに維持されます。
AMI を見つけるには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- [AMI] を選択します。
- 検索フィールドにオートメーションの ID を入力します。
EC2 Instance Connect を使用する
Amazon Linux インスタンスに接続する方法については、「EC2 Instance Connect を使用して Linux インスタンスに接続する」を参照してください。
EC2 シリアルコンソールを使用する
Linux で EC2 シリアルコンソールにアクセスできる場合は、コンソールを使用してサポートされている Nitro ベースのインスタンスタイプをトラブルシューティングしてください。詳細については、「EC2 シリアルコンソールへのアクセスを設定する」を参照してください。
レスキューインスタンスを使用する
次の手順を実行します。
-
インスタンスを停止します。
-
ルートボリュームのデバイス名を取得するには、次のコマンドを実行します。
sudo lsblk -f出力例:
NAME FSTYPE LABEL UUID MOUNTPOINT xvda └─xvda1 xfs 1234abcd-56ef-78gh-90ij-1234klmnopqr / xvdf └─xvdf1 xfs abcd1234-ef56-gh78-ij90-qr1234klmnop -
アタッチされたボリュームをレスキューインスタンスにマウントするには、次のコマンドを実行します。
sudo mkdir /mnt/target sudo mount /dev/xvdf1 /mnt/target注: /dev/xvdf1 を元のインスタンスのルートボリュームデバイス名に置き換えてください。
-
新しいパブリックキーを作成するには、次のコマンドを実行します。
sudo mkdir -p /mnt/target/home/USER/.ssh echo "your_new_public_key" | sudo tee -a /mnt/target/home/USER/.ssh/authorized_keys注: USER を元のインスタンスのユーザー名に、your_new_public_key を使用するパブリックキーに置き換えてください。パブリックキー名は、ssh-rsa で始まります。
-
インスタンス内のキーへのアクセスを設定するには、次のコマンドを実行します。
OS_USER=os-user sudo chown -R $OS_USER:$OS_USER /mnt/target/home/$OS_USER/.ssh sudo chmod 700 /mnt/target/home/$OS_USER/.ssh sudo chmod 600 /mnt/target/home/$OS_USER/.ssh/authorized_keys注: os-user をインスタンスの起動に使用した AMI に関連付けられたユーザー名に置き換えてください。
-
ボリュームをアンマウントするには、次のコマンドを実行します。
sudo umount /mnt/target
- 言語
- 日本語

関連するコンテンツ
質問済み 2年前