Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如果在開始啟動執行個體後遺失 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 會刪除該資料。 - 將執行個體關閉行為設定為停止,以確保執行個體在您停止時不會終止。
**注意:**當您停止和啟動執行個體時,該執行個體的公有 IP 位址也會變更。最佳做法是使用彈性 IP 位址而不是公用 IP 位址,將外部流量路由到執行個體。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
輸入使用者資料指令碼
**重要:**請勿在使用者資料指令碼中儲存敏感資料。請改用安全的方法,例如 AWS Secrets Manager。
如果您的執行個體無法存取 cloud-init 或您遇到 cloud-init 問題,請繼續使用救援執行個體。
建立新的金鑰對
請完成下列步驟:
- 建立新的金鑰對。
- 如果您在 Amazon EC2 主控台上建立私有金鑰,請擷取金鑰對的公有金鑰。
- 開啟 Amazon EC2 console (Amazon EC2 主控台)。
- 停止您的執行個體。
- 選擇 Actions (動作),然後選擇 Instance settings (執行個體設定)。
- 選擇 Edit user data (編輯使用者資料),然後輸入以下指令碼:
**注意:**將 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 - 選擇 Save (儲存)。
- 啟動您的執行個體。
確認 cloud-init 階段已完成
在執行個體主控台輸出中,檢查以下因素以確保 cloud-init 階段已完成:
- 沒有錯誤訊息。
- 所有 cloud-init 命令均列為已執行。
- 您有看到 cloud-init 的完成訊息,其類似以下範例: 「Finished [0;1;39mCloud-init: Final Stage[0m Cloud-init v.A.B.C finished at ..」。
從執行個體的使用者資料中移除命令
請完成下列步驟:
- 停止您的執行個體。
- 選擇 Actions (動作),然後選擇 Instance settings (執行個體設定)。
- 選擇 Edit user data (編輯使用者資料),然後清除欄位中的所有內容。
- 選擇 Save (儲存)。
- 啟動您的執行個體。
使用 Systems Manager
若要復原 Systems Manager 中的受管節點執行個體,請使用 AWSSupport-ResetAccess 執行手冊來復原金鑰對。AWSSupport-ResetAccess 會使用 EC2Rescue,自動在執行個體上產生並新增新的 SSH 金鑰對。
Systems Manager 會將您執行個體的新 SSH 私有金鑰加密並儲存在 Parameter Store (AWS Systems Manager 的一項功能) 中,格式為 /ec2rl/openssh/instance_id/key。
若要從 Parameter Store 取得私有 SSH 金鑰,請執行 get-parameters AWS CLI 命令:
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 Machine Image (AMI)。Amazon EC2 不會自動刪除新的 AMI,因此其會保留在您的 AWS 帳戶中。
若要找到 AMI,請完成以下步驟:
- 開啟 Amazon EC2 console (Amazon EC2 主控台)。
- 選擇 AMIs。
- 在搜尋欄位中輸入自動化 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
- 語言
- 中文 (繁體)

相關內容
- 已提問 1 年前
AWS 官方已更新 8 個月前