1. 程式人生 > >修復AWS上EC2損壞的sshd_config檔案

修復AWS上EC2損壞的sshd_config檔案

常識: 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例項上,並修改相應的檔案。以下便是詳細操作:

  1. 關閉當前EC2例項
  2. 將有錯誤sshd_config的磁碟(EBS)拆卸
  3. 當磁碟重新裝載到另一個EC2例項上,並掛載該磁碟
    拆卸與裝載都在AWS的console介面操作,裝載成功後,可用以下命令掛載(我的新的磁碟名字是 xdf):
sudo mkdir /mnt/other
sudo mount /dev/xvdf /mnt/other
  1. 編輯損壞的檔案sshd_config,修復配置與語法錯誤
  2. 反掛載並拆卸掉該磁碟
sudo umount /mnt/other
  1. 再次將該磁碟裝載到原EC2例項上
  2. 啟動原EC2例項,測試修改結果

這些做完之後,一切都如以前一樣。又可以通過SSH KEY連上原來的例項。

結論

教訓是,永遠別再一次做這種事。在適當的時候,也可以給你的編輯器sudo的許可權,vim的配置

cnoremap w!! %!sudo tee > /dev/null %