我有租一部 aws 的 ec2 虛擬主機。
如果不小心下錯指令把少數幾個重要檔案搞爛掉了,
以致無法登入甚或是無法開機, 該怎麼辦?
比方說前幾天我就發生了一個悲劇...
我的伺服器當然有照著
密不透水的 ssh 這篇做,
在 /etc/ssh/sshd_config 裡面設定
PasswordAuthentication no
,
並且搭配 ~/.ssh/authorized_keys 指定允許登入的 ssh 公鑰。
那天我手殘不小心把這個檔案刪掉了,
馬上掉入恐慌, 就像幾個月前某天出門後才發現忘記帶鑰匙一樣!
比忘記帶鑰匙更慘的是, 這次沒辦法找老婆幫忙~
更糟糕的是: 伺服器上面還有老婆要用的檔案...
我雙重死定了~
以下重點摘要解鎖步驟:
- 從網頁登入 aws ec2 console。
- 停用 (stop) 出問題的虛擬機 (叫它 「主角」 好了)。
- 找到主角的 storage 清單, detach 它的 root volume (叫它 「問題硬碟」 好了), 也就是存放 ~/.ssh/authorized_keys 的地方。
- 建立一部臨時虛擬機, 登入後用
cat /proc/partitions
查看預設有哪些 volume 可用。 - 把問題硬碟給 attach 到臨時虛擬機上。
- 在臨時虛擬機裡面再下一次
cat /proc/partitions
, 看看問題硬碟被指定的裝置名稱, 並且把它掛載起來。 - 修復問題硬碟裡面的 ~/.ssh/authorized_keys 然後卸載。
- 回到網頁 aws console 頁面, 把問題硬碟從臨時虛擬機上 detach 下來, 再把它 attach 回主角去, 然後就可以啟動主角了!
- 記得要把臨時虛擬機刪掉, 免得浪費錢。
倒數第二步要把問題硬碟 attach 回主角時,
aws 的頁面會告訴你只能指定 sdf ~ sdp 的某個名稱。
試著指定 sda 果然失敗。 不能指定成 sda, 那我要怎麼開機啊?!
還好查到
這個問答, 可以從自己的工作電腦這樣查詢:
aws ec2 describe-instances --region 某區域 --instance-id 主角的代號
| grep RootDeviceName
查出原來在主角的設定裡, 採用 /dev/sda1 作為 root 分割區。
所以回到網頁 aws console 頁面, 再試著指定把問題硬碟以 sda1
的代號 attach 回去, 果然就成功了!
呼~ 終於有臉面對老婆了~
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。