有一次因為 selinux 設定不當導致 SSH 無法連上我的 VPS,我找到了這篇文章 How to Recover Your VPS in Rescue Mode 進入救援模式修改設定就可以重新連上線了。
(其實以我的需求來說應該用 VNC 才對,那時候雖然知道 VNC 可以遠端畫面操作,不過我還以為需要先在 VPS 上安裝相應軟體才能用所以我在第一時間沒有想到它。)
救援模式會使用自己準備的 kernel 做為系統來啟動而不是使用我們在硬碟中一直使用的系統,這樣一來即使是因為不當設定導致無法開機也可以進入救援模式修改設定來回復。
開啟救援模式
這個步驟會因不同的 VPS 操控面板(control panel)而異,這裡參考就好。
進入 VPS 的操控面板選擇 rescue
選擇 kernel,基本上選最新的就可以了
啟用救援模式
確認啟用救援模式
此時 VPS 會重新開機進入救援模式,並且給你登入救援模式的帳號密碼(可能要稍等一下才連得上,畢竟重新開啟也需要時間)
掛載原先系統
連上 VPS
清除遠端主機認證
因為救援模式算是另一個系統了,如果用同個 IP 進行 SSH 會被阻止
ssh-keygen -R 你的IP
SSH 連線
使用剛剛操控面板給你的資訊進行連線
ssh user@你的IP
掛載原系統分區
要對原先系統進行設定必須要先找到系統分區並將其掛載
列出可用設備
lsblk
此時會列出如下的列表
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 254:0 0 17G 0 disk
├─vda1 254:1 0 16G 0 part
└─vda2 254:2 0 1G 0 part
vdb 254:16 0 1.1G 0 disk
└─vdb1 254:17 0 1.1G 0 part /
利用磁碟大小找到原先系統的磁碟代號
例如我原本的硬碟有 17G 從垂直欄 SIZE 找到 17G 大小的硬碟為 vda,所以 vda 就是我要找的硬碟
而底下被分割成 16G 的 vda1 就是我要掛載的磁碟代號。
創建掛載目錄
mkdir /mnt/root
掛載
mount /dev/你的磁碟機代號 /mnt/root
原先系統會被掛載在 /mnt/root 下,這時就可以去找導致錯誤的程式修改其設定或是關閉其服務。
當然我們也可以使用 chroot (change root) 來方便操作
chroot /mnt/root
關閉救援模式
操作完後就可以把救援模式關掉,如果確實修改好導致無法開機的設定,那麼等一段時間重新開機後就可以正常連回 VPS 了
關閉
確認
重新清除遠端主機認證
ssh-keygen -R 你的IP