Ubuntu 18.04出來已經有一段時間了(18.10都出來了),國內的云廠商里面,阿里云已經有了18.04的鏡像,騰訊云目前還沒有。大家手頭16.04的服務器,是否已經有了升級的計劃呢?
目前版本的Ubuntu提供了非常方便的升級方法,不需要備份數據,可以直接升級,具體的方法是,ssh連接到服務器后,執行:
sudo do-release-upgrade
執行這一命令后,根據網絡情況,可能需要等待一段時間才能開始交互式操作。過程中會有很多選項,一般來說選擇默認設置(一路回車)就可以。
更新完之后(大概要十幾分鐘),會提示需要重啟系統。等待重啟完成后,再嘗試ssh連接上去,會發現:
連不上了!
怎么解決呢?
TL;DR: 卸載重裝openssh-server,然后重啟ssh服務
下面詳細進行介紹
準備工作
- 首先,你需要有這臺服務器的管理權限(不是
sudo
權限,是云服務器廠商那里的賬號管理權限) -
之后,你需要利用VNC方式登錄服務器
阿里云-遠程連接
騰訊云-登錄
可能的問題
這種登錄方式無法使用PEM密鑰,只能用賬號密碼,所以如果原來服務器的配置是沒有密碼的,就需要臨時設置一下密碼
關鍵步驟
成功登錄到服務器,見到熟悉的終端界面之后我們就可以開始解決ssh的問題了。
首先嘗試直接重啟ssh服務
sudo service ssh restart
一般來說是會失敗的(我試了幾次都如此)。那么,正確的解決辦法是什么呢?
sudo apt remove openssh-server
sudo apt install openssh-server
卸載重裝openssh-server
,注意在重新安裝后會讓你選擇是保留本地配置還是用新配置覆蓋本地配置,這里選擇用新配置進行覆蓋。
之后,再啟動ssh
服務就一切OK了。
sudo service ssh start
嘗試一下從本地ssh登錄到服務器,應該沒有問題了。這樣,你就完成了服務器從16.04升級到18.04的工作。
掃尾工作
把之前臨時設置的密碼清除掉
以zhangsan用戶為例
sudo passwd -l zhangsan
這樣就把剛才臨時設置的密碼給清除掉了。
問題分析
上面的操作步驟可以解決升級ubuntu導致的ssh無法登陸問題,那么問題的原因出在哪里呢?
推測1:升級方式
實際上,在使用do-release-upgrade
進行升級時,是有相關的提示的
(大意)不建議使用ssh方式升級系統,如果升級出現問題,將導致ssh無法連接
所以,如果有條件的話,可以直接用vnc方式遠程連接然后進行系統升級。
推測2:ssh配置文件
在更新過程中,有一次是提示選擇是否更新ssh配置文件,默認選項是不更新(使用本地原有的文件)。考慮到后來的解決辦法里是重新安裝openssh-server
然后覆蓋本地的配置文件,有可能在這一步中選擇覆蓋本地配置文件的話,就不會出現ssh無法連接的問題。由于沒有嘗試過,這里我無法給出確定的結論。