A 公司在 AWS 云平臺上的測試環節中構建了一臺 AWS EC2 Linux 實例。由于長時間沒有使用,忘記了登錄該實例的SSH 私有密鑰,因此無法登錄該實例。項目中的成員不太熟悉 AWS EC2 相關的知識,需要提供一個便捷的解決方案。
采用更新實例的 SSH 密鑰文件的方式。
利用其它的AWS EC2 Linux 實例,掛載需要恢復SSH 私有密鑰的實例的根設備卷;然后更新該根設備卷中的公有密鑰。
本次采用AWS Console界面完成作業。
注意:根據項目的具體情況,可以采用不同的實施方法。比如使用命令行(CLI)部署、代碼部署 (CloudFomation、Terraform等)、以及其它開發語言(SDK)完成作業。
步驟一:生成新的密鑰對
1. 登錄到AWS EC2控制臺頁面。
2. 在網絡和安全(Network & Security)頁面創建新的密鑰對。
步驟二:需要恢復密鑰的實例的作業
1. 記錄需要恢復密鑰的實例的下列信息
在存儲(Storage)選項卡中,記錄根設備名稱(例如/dev/sda1或/dev/xvda),在存儲卷(Block devices)下找到對應的卷ID(Volume ID)。
2. 停止需要恢復密鑰的實例
3. 分離根設備卷
將需要恢復密鑰的實例的根設備卷從原始實例中分離(Detach Volume),等待其狀態變為可用(available)。
步驟三:臨時實例的操作
1. 創建或者啟動一個可登錄的臨時實例。
2. 附加需要恢復密鑰的實例的根設備卷,并掛載
將需要恢復密鑰的實例的根設備卷附加到臨時實例上,并記下附加時設置的設備名稱(例如/dev/xvdf),然后掛載需要恢復密鑰的實例的根設備卷。通過SSH連接到臨時實例,使用lsblk命令確定卷是否已經分區。如果已分區,將帶有“part”類型的分區(如/dev/xvdf1)進行掛載;否則掛載原始設備(如/dev/xvdf)。
3. 更新 SSH 密鑰文件
在臨時實例上,找到掛載的根設備卷中的.ssh目錄,將新的公鑰添加到authorized_keys文件中(如果文件不存在,則創建它)。
關鍵命令:
[ec2-user@ip-172-31-16-198 ~]$ mount -t xfs -o nouuid /dev/xvdb1 /data
4. 從臨時實例上卸載需要恢復密鑰的實例的根設備卷。
步驟一:在需要恢復密鑰的實例中重新附加根設備卷
將其重新附加到原始實例上,確保設備名稱與原始設置一致(如/dev/sda1)。
步驟二:啟動需要恢復密鑰的實例
在EC2控制臺中啟動需要恢復密鑰的實例,等待實例狀態變為運行(running)。
步驟三:連接需要恢復密鑰的實例
使用新的密鑰對嘗試通過SSH連接到原始實例,如果連接成功,則說明SSH密鑰恢復完成。