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无法连接的问题。由于没有尝试过,这里我无法给出确定的结论。