修復AWS上EC2損壞的sshd_config檔案
阿新 • • 發佈:2018-12-31
常識: AWS是沒有root使用者的,登陸也都是通過SSH KEY完成授權認證。
背景: 正在AWS上搭一個CI
(GO),與gitlab
,為了將其進行整合,需將gitlab的deploy key設定成GO的SSH KEY。然而,GO建立的是無密碼的使用者go,導致無法進入使用者go的home目錄。
正常 su go
無法切換到go使用者,當時又恰巧正在看SSH的config檔案:
/etc/ssh/sshd_config
裡面有一條 PermitEmptyPasswords no
,接著便私自改成了yes
,無用。PermitRootLogin no
,改成 yes
,依舊無用。
注:廢話,肯定沒用啊,這是設定SSH的。
正確的做法:
sudo su go
當修改之後,沒改回來,當我退出AWS之後就杯具了。再也登陸到AWS上,因為登陸時卻輸密碼,而實際卻是沒有密碼。此時真想多天說一句:X。
Google了很多解決方案,都說得是用Live CD,重新引導進入,然後掛載有sshd_config檔案的磁碟並修復它。這在EC2上是根本不可能的,能做的只有把root磁碟卷拆卸,再裝載到另外的EC2例項上,並修改相應的檔案。以下便是詳細操作:
- 關閉當前EC2例項
- 將有錯誤sshd_config的磁碟(EBS)拆卸
- 當磁碟重新裝載到另一個EC2例項上,並掛載該磁碟
拆卸與裝載都在AWS的console介面操作,裝載成功後,可用以下命令掛載(我的新的磁碟名字是 xdf):
sudo mkdir /mnt/other
sudo mount /dev/xvdf /mnt/other
- 編輯損壞的檔案sshd_config,修復配置與語法錯誤
- 反掛載並拆卸掉該磁碟
sudo umount /mnt/other
- 再次將該磁碟裝載到原EC2例項上
- 啟動原EC2例項,測試修改結果
這些做完之後,一切都如以前一樣。又可以通過SSH KEY連上原來的例項。
結論
教訓是,永遠別再一次做這種事。在適當的時候,也可以給你的編輯器sudo的許可權,vim的配置
cnoremap w!! %!sudo tee > /dev/null %