如果我在首次啟動後就遺失了 SSH 金鑰對,該如何連接至 Amazon EC2 執行個體?

2 分的閱讀內容
0

我想連接至我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,但遺失了 SSH 金鑰對。

解決方法

重要:

方法 1、2 和 3 需要停止和啟動執行個體。請注意下列事項:

方法 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

username 取代為您的使用者名稱,例如 ec2-user。您可以輸入預設使用者名稱,或輸入自訂使用者名稱 (如果先前已為執行個體設定)。如需預設使用者名稱的清單,請參閱取得執行個體的相關資訊

PublicKeypair 取代為在步驟 2 中擷取的公有金鑰。請確保輸入整個公有金鑰,以 ssh-rsa 開頭。

7.    選擇儲存

8.    啟動您的執行個體

9.    在 cloud-init 階段完成之後,確認已取代公有金鑰

重要:由於指令碼包含金鑰對,因此請從使用者資料欄位中移除指令碼。

10.    停止執行個體

11.    選擇動作執行個體設定編輯使用者資料

12.    刪除編輯使用者資料對話方塊中的所有文字,然後選擇儲存

13.    啟動您的執行個體

方法 2: 使用 AWS Systems Manager

如果您的執行個體是 AWS Systems Manager 中的受管執行個體,請使用 AWSSupport-ResetAccess document 來復原遺失的金鑰對。AWSSupportResetAccess 使用 EC2 Rescue for Linux 工具,在指定的 EC2 執行個體上自動產生並新增 SSH (公有/私有) 金鑰對。

執行個體的新 SSH 私有金鑰會加密並儲存在 Parameter Store (AWS Systems Manager 的一項功能) 中。參數名稱是 /ec2rl/openssh/instance_id/key

使用下列命令從 Parameter Store 中擷取私有 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 Machine Image (AMI)。新的 AMI 不會自動刪除,並會保留在您的帳戶中。

若要尋找這些 AMI,請執行以下操作:

1.    開啟 Amazon EC2 主控台,然後選擇 AMI

2.    在搜尋欄位中輸入自動化執行 ID。

方法 3: 使用 Amazon EC2 Instance Connect

如果您的執行個體是 Amazon Linux 2 2.0.20190618 或更新版本,包括 Amazon Linux 2023,則可以使用 EC2 Instance Connect 連接至執行個體。

方法 4: 使用 EC2 序列主控台

如果已開啟適用於 Linux 的 EC2 序列主控台,您可以用來對支援的 Nitro 型執行個體類型進行疑難排解。序列主控台可協助您對開機問題、網路組態和 SSH 組態問題進行疑難排解。序列主控台可連線至執行個體,無需可運作的網路連線。您可以使用 Amazon EC2 主控台或 AWS Command Line Interface (AWS CLI),存取序列主控台。

使用序列主控台之前,先在帳戶層級授予主控台存取權。建立 AWS Identity and Access Management (IAM) 政策,將存取權授予 IAM 使用者。此外,每個使用序列主控台的執行個體都必須至少包含一個密碼型使用者。如果您的執行個體無法連線,而且您並未設定序列主控台的存取權,請遵循方法 1、方法 2 或方法 3 中的指示進行操作。如需有關設定適用於 Linux 的 EC2 序列主控台的資訊,請參閱設定 EC2 序列主控台的存取權

**注意:**如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版本的 AWS CLI

相關資訊

啟動時在 Linux 執行個體上執行命令

AWS Systems Manager Automation

AWS 官方
AWS 官方已更新 1 年前