Amazon Elastic Compute Cloud (Amazon EC2) インスタンスに接続したいのですが、SSH キーペアを紛失しました。
解決策
重要:
方法の 1、2、3 では、インスタンスを一旦停止してから起動する必要があります。次の点に注意してください:
- インスタンスがインスタンスストアでバックアップされている場合や、データを含むインスタンスストアボリュームがある場合、インスタンスを停止するとデータが失われます。詳細については、「インスタンスのルートデバイスタイプを判別する」を参照してください。インスタンスストアボリュームに残しておきたいデータは必ずバックアップしてください。
- インスタンスを停止して再起動すると、あなたのインスタンスのパブリック IP アドレスが変更されます。外部トラフィックをあなたのインスタンスにルーティングするときは、パブリック IP アドレスの代わりに Elastic IP アドレスを使用することをお勧めします。
方法 1: ユーザーデータを入力する
1. 新しいキーペアを作成します。
2. Amazon EC2 コンソールでプライベートキーを作成する場合は、キーペアのパブリックキーを取得します。
3. Amazon EC2 コンソールを開きます。
4. インスタンスを停止します。
5. [アクション]、[インスタンス設定]、**[ユーザーデータを編集]**を選択します。
6. 次のスクリプトを [ユーザーデータの編集] ダイアログボックスにコピーします:
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
ユーザー名を自分のユーザー名 (ec2-user など) に置き換えます。デフォルトのユーザー名を入力するか、インスタンスに設定されていた場合は、カスタムユーザー名を入力できます。デフォルトユーザー名のリストについては、「インスタンスに関する情報の取得」を参照してください。
PublicKeypair は、ステップ 2 で取得したパブリックキーに置き換えてください。必ず ssh-rsaで始まるパブリックキー全体を入力してください。
7. **[保存]**を選択します。
8. あなたのインスタンスを起動します。
9. cloud-init フェーズが完了したら、パブリックキーが置き換えられたことを確認してください。
重要:スクリプトにはキーペアが含まれているため、[ユーザーデータ] フィールドからスクリプトを削除します。
10. インスタンスを停止します。
11. [アクション]、[インスタンス設定]、**[ユーザーデータを編集]**を選択します。
12. [ユーザーデータの編集] ダイアログボックスのテキストをすべて削除し、**[保存]**を選択します。
13. あなたのインスタンスを起動します。
方法 2: AWS Systems Manager を使用する
インスタンスが AWS Systems Manager のマネージドインスタンスである場合は、AWSSupport-ResetAccess ドキュメントを使用して、紛失したキーペアを回復してください。AWSSupportResetAccess は、指定された EC2 インスタンスで EC2 Rescue for Linux ツールを使用して、新しい SSH (パブリック/プライベート) キーペアを自動的に生成して追加します。
あなたのインスタンスの新しい SSH プライベートキーは暗号化され、AWS Systems Manager の機能であるパラメータストアに保存されます。パラメータ名は /ec2rl/openssh/instance_id/key です。
以下のコマンドで、パラメータストアからプライベート SSH キーを取得します:
$ 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 ファイルに変換します:
$ ssh-keygen -f key-pair-name -e -m pem > key-pair-name.pem
**注:**key-pair-name は必ず、あなたのキーペアの名前に置き換えてください。
自動化ワークフローでは、パスワードが有効な Amazon マシンイメージ (AMI) のバックアップが作成されます。新しい AMI は自動的に削除されず、アカウントに残ります。
これらの AMI を探すには:
1. Amazon EC2 コンソール を開き、**[AMI]**を選択します。
2. 検索フィールドにオートメーション実行 ID を入力します。
方法 3: Amazon EC2 インスタンス接続を使用する
インスタンスが Amazon Linux 2 2.0.20190618 以降 (Amazon Linux 2023 など) の場合は、EC2 インスタンス接続でインスタンスに接続できます。
方法 4: EC2 シリアルコンソールを使用する
Linux 用の EC2 シリアルコンソールを有効にすると、それを使用してサポートされている Nitro ベースのインスタンスタイプのトラブルシューティングを行うことができます。シリアルコンソールは、起動問題、ネットワーク設定、SSH 設定問題のトラブルシューティングに役立ちます。シリアルコンソールは、ネットワーク接続が機能していなくてもインスタンスに接続します。シリアルコンソールには、Amazon EC2 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) でアクセスできます。
シリアルコンソールを使用する前に、アカウントレベルでシリアルコンソールへのアクセスを認める必要があります。次に、IAM ユーザーにアクセス権を与える AWS ID とアクセス管理 (IAM) ポリシーを作成します。また、シリアルコンソールを使用するすべてのインスタンスには、少なくとも 1 人のパスワードベースのユーザーを含める必要があります。あなたのインスタンスにアクセスできず、シリアルコンソールへのアクセス権限を設定していない場合は、方法 1 、方法 2、または方法 3 の指示に従ってください。Linux 用 EC2 シリアルコンソールの設定については、「EC2 シリアルコンソールへのアクセスを設定する」を参照してください。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、使用している AWS CLI が最新バージョンであることを確認してください。
関連情報
起動時に Linux インスタンスでコマンドを実行する
AWS Systems Manager Automation