ssh远程升级Ubuntu20.04到Ubuntu 22.04
陈拓 2024/10/16-2024/10/26
1. 简介
本文介绍了如何通过ssh将Ubuntu系统从20.04升级到22.04。
在进行系统升级之前,建议备份重要数据,以防升级过程中出现问题。
2. 更新当前系统
- 硬件系统架构
- 当前操作系统版本
lsb_release -a
- 更新源软件列表
sudo apt update
- 升级系统中所有已安装的软件包
sudo apt upgrade
- 升级系统中的软件包并处理依赖关系
sudo apt dist-upgrade
dist-upgrade命令通常用于系统升级,因为它能够处理更复杂的依赖关系和软件包之间的冲突。然而,它也可能会引起系统配置的较大变化,因此在运行sudo apt dist-upgrade之前,确保备份重要数据是一个好习惯。
3. 清理不再需要的包
sudo apt autoremove
sudo apt clean
4. 准备升级
安装update-manager-core包,它提供了do-release-upgrade命令:
sudo apt install update-manager-core
5. 配置升级行为
确保/etc/update-manager/release-upgrades中的Prompt设置为lts,以便升级到下一个LTS版本。
sudo nano /etc/update-manager/release-upgrades
默认提示和升级行为的有效选项:
- never
从不检查或允许升级到新版本。
- normal
检查是否有新版本可用。如果发现多个新版本,版本升级程序将尝试升级到在当前正在运行版本之后紧接着的那个受支持的版本。无论这个版本是否是LTS版本。
- lts
检查是否有新的长期支持版LTS可用。升级程序将尝试升级到当前运行的LTS版本之后的第一个可用LTS版本。请注意,如果使用此选项,并且当前运行的版本本身不是LTS版本,升级程序将认为用户的操作意图实际应为normal。
6. 开始升级
这个命令将启动升级向导,它会检查新的发行版,然后指导你完成升级过程。
- 运行以下命令来开始升级过程
sudo do-release-upgrade
- 风险提示及选择
Checking package manager
正在检查软件包管理器,Ubunt常用的是apt。在升级操作前先对软件包管理器的状态、配置等进行检查,以确保后续升级流程能正常进行。
Continue running under SSH?
询问是否要在SSH连接下继续进行当前的操作。因为接下来的提示信息会阐述在SSH下进行此操作可能存在的问题,所以先明确询问你是否要坚持在这种远程连接方式下继续。
This session appears to be running under ssh. It is not recommended to perform a upgrade over ssh currently because in case of failure it is harder to recover.
当前的会话似乎是通过SSH运行的。提示不建议通过SSH进行升级操作,原因是如果在升级过程中出现失败的情况,后续要恢复系统会变得更加困难。这是因为通过SSH远程操作时,一旦升级出现严重问题导致系统无法正常工作,远程修复的难度会比在本地直接操作要大得多,比如可能无法方便地进入系统进行故障排查、修复文件系统等操作。
If you continue, an additional ssh daemon will be started at port '1022'.
如果选择继续在SSH下进行升级操作,那么系统将会在端口1022启动一个额外的SSH守护进程。这样做的目的可能是为了在升级过程中万一出现问题,能够通过这个新启动的SSH连接尝试进行一些补救操作或者查看系统状态等,但这也只是一种相对有限的保障措施,毕竟升级失败后的恢复仍然可能很困难。
Do you want to continue?
Continue [yN] y
再次询问你是否真的想要继续在SSH下进行升级操作,输入y(表示是,继续)或者N(表示否,不继续)。我们的回答是y,表示我们决定不顾前面提到的风险,仍然要在SSH下继续进行升级操作。
- 启动额外的SSH守护进程
Starting additional sshd
正在启动额外的SSH守护进程(sshd)。
To make recovery in case of failure easier, an additional sshd will be started on port '1022'. If anything goes wrong with the running ssh you can still connect to the additional one.
为了在升级出现失败情况时能够更方便地进行恢复操作,将会在端口1022启动一个额外的SSH守护进程。如果正在运行的常规SSH连接出现任何问题(比如在升级过程中由于系统故障导致原来的SSH连接中断等情况),你仍然可以通过连接到这个新启动的位于端口1022的SSH守护进程来尝试对系统进行一些操作,比如查看系统状态、尝试修复等。
If you run a firewall, you may need to temporarily open this port. As this is potentially dangerous it's not done automatically. You can open the port with e.g.: 'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'
如果你运行了防火墙(在系统上设置了防火墙来控制网络访问),那么可能需要暂时打开端口1022。因为启动这个额外的SSH守护进程并开放对应的端口存在一定潜在风险(比如可能会让未经授权的外部访问有可乘之机等),所以系统不会自动为你打开这个端口。它还给出了一个示例命令(针对使用iptables作为防火墙管理工具的情况),即iptables -I INPUT -p tcp --dport 1022 -j ACCEPT,通过这个命令可以在iptables防火墙规则中添加一条允许TCP协议且目标端口为1022的流量进入的规则,从而打开端口1022。但需要注意的是,在升级完成后,应该根据实际情况考虑是否要恢复防火墙对该端口的原有设置,以保障系统安全。
To continue please press [ENTER]
如果要继续进行后续的操作(继续进行系统升级操作),请按下回车键([ENTER])。
- 启动升级
Do you want to start the upgrade?
询问用户是否想要启动此次升级操作。这是一个关键的确认步骤,用户需要根据后续提供的关于升级的详细信息来做出决定。
2 installed packages are no longer supported by Canonical. You can still get support from the community.
告知用户当前系统中有2个已经安装的软件包不再受到Canonical(Ubuntu的维护公司)的支持。不过,用户仍然可以从社区(通常指开源社区,比如Ubuntu社区等)获取关于这些软件包的支持。这意味着这2个软件包可能存在后续更新不及时、安全性保障相对较弱等情况,但社区里可能有其他用户或开发者能提供一定的帮助。
7 packages are going to be removed. 156 new packages are going to be installed. 1146 packages are going to be upgraded.
详细说明了此次升级操作将会对系统中的软件包产生的影响。具体如下:
7 packages are going to be removed:有7个现有的软件包将会在升级过程中被删除。这些软件包可能是因为与新版本系统不兼容、已被替代或者不再符合新的系统架构等原因而被移除。
156 new packages are going to be installed:将会安装156个新的软件包。这些新软件包可能是新系统版本所必需的组件,用于提供新的功能、修复漏洞或者提升系统性能等。
1146 packages are going to be upgraded:有1146个现有的软件包将会被升级到新版本。这通常是为了使这些软件包与新的系统版本兼容,并获取最新的功能和修复已知的漏洞等。
You have to download a total of 1,169 M. This download will take about 7 minutes with your connection.
告知用户此次升级需要下载的数据总量为1169兆字节(M)。并且根据用户当前的网络连接速度估算,完成这个下载大概需要7分钟时间。这可以让用户对下载所需的时间和网络资源有一个大致的了解,以便合理安排升级操作的时间。
Installing the upgrade can take several hours. Once the download has finished, the process cannot be canceled.
提醒用户安装此次升级可能需要花费几个小时的时间。而且一旦下载完成,整个升级过程就无法取消了。这是在强调升级过程的耗时性以及一旦开始安装后的不可逆性,用户需要确保在有足够时间且不会被中途打断的情况下启动升级操作。
Continue [yN] Details [d]:
提供给用户两个操作选项:
Continue [yN]:让用户通过输入y(表示是,继续)或者N(表示否,不继续)来决定是否要继续进行升级操作。
Details [d]:用户如果输入d,则可以查看关于此次升级的更详细的信息,比如具体是哪些软件包要被删除、哪些要被升级、新安装的软件包的功能介绍等。这有助于用户更全面地了解升级情况,以便做出更准确的决策。
继续[yN]详细信息[d]
- 软件包升级期间是否自动重启
There are services installed on your system which need to be restarted when certain libraries, such as libpam, libc, and libssl, are upgraded.
在你的系统上安装了一些服务,当某些特定的库(比如libpam、libc、libssl等)被升级时,这些服务需要被重启。这是因为这些服务依赖于这些库来正常运行,库升级后可能会改变一些接口或者功能实现,为了保证服务能继续正常运行,就需要重启它们使其重新加载新的库版本。
Since these restarts may cause interruptions of service for the system, you will normally be prompted on each upgrade for the list of services you wish to restart.
由于这些服务的重启可能会导致系统的服务中断,所以通常在每次进行相关库的升级时,系统会提示你列出你希望重启的服务清单。也就是说,系统不会自动重启所有需要重启的服务,而是会先询问你,让你根据实际情况(比如考虑当前系统正在进行的重要业务是否能接受短暂中断等)来决定哪些服务可以重启。
You can choose this option to avoid being prompted; instead, all necessary restarts will be done for you automatically so you can avoid being asked questions on each library upgrade.
你可以选择这个选项(即接下来询问的那个选项)来避免被提示(关于要重启哪些服务的提示)。相反,如果选择了这个选项,那么所有必要的重启操作将会自动为你完成,这样你就可以避免在每次进行库升级时都被问到相关问题。
Restart services during package upgrades without asking?
询问用户是否要在软件包升级期间(特别是涉及到上述提到的那些重要库升级时)不经过询问就自动重启相关服务。用户需要通过输入合适的回答(比如y表示是,同意自动重启;N表示否,不同意自动重启)来做出选择。
- 配置文件resolved.conf的处理
这段提示信息是在系统检测到/etc/systemd/resolved.conf这个配置文件自安装以来发生了变化,并且软件包分发商(通常是指操作系统或相关软件包的维护者)已经发布了该配置文件的更新版本的情况下出现的。它主要是在询问用户针对这种情况想要采取的处理方式。
Configuration file '/etc/systemd/resolved.conf'
配置文件/etc/systemd/resolved.conf
这个文件通常用于系统的域名解析相关的配置,比如设置DNS服务器地址、域名解析策略等。
==> Modified (by you or by a script) since installation.
该配置文件自安装以来已经被修改过了,修改者可能是你自己,也可能是某个在系统中运行的脚本。
==> Package distributor has shipped an updated version.
表示软件包分发商(如操作系统的维护团队等)已经提供了该配置文件的一个更新版本。这可能是因为修复了一些已知的问题、优化了配置或者适应了新的系统需求等原因而发布了新的版本。
What would you like to do about it? Your options are:
询问用户对于这种配置文件存在修改版本和更新版本的情况想要做些什么。接下来列出了用户可以选择的几种操作选项。
Y or I : install the package maintainer's version
如果用户选择输入Y或者I,那么系统将会安装软件包维护者(即分发商)提供的该配置文件的版本。这意味着将会覆盖掉你当前已经修改过的版本,采用分发商认为的标准配置。
N or O : keep your currently-installed version
若用户选择输入N或者O,则系统会保留你目前已经安装的该配置文件的版本。也就是维持你之前所做的修改或者脚本改动后的状态,不采用分发商提供的更新版本。
D : show the differences between the versions
当用户输入D时,系统会展示出你当前安装的版本和软件包分发商提供的更新版本之间的差异。这样你可以直观地看到两个版本在内容上的不同之处,以便更好地决定是否要采用新的版本。
Z : start a shell to examine the situation**:
如果用户输入Z,系统会启动一个shell(命令行环境),让你能够在这个环境中进一步深入地检查当前的情况。比如你可以在这个shell中查看配置文件的具体内容、相关的系统设置、运行一些与该配置文件相关的命令等,以便更全面地了解情况并做出合适的决策。
The default action is to keep your current version.
指出默认的操作是保留你当前的版本。也就是说,如果用户不做任何选择(直接按回车键等),系统将会按照这个默认操作执行,即维持现有的/etc/systemd/resolved.conf文件的状态。
*** resolved.conf (Y/I/N/O/D/Z) [default=N]?
再次明确询问用户对于/etc/systemd/resolved.conf这个配置文件的处理方式,让用户通过输入Y、I、N、O、D、Z中的一个字符来做出选择,并且提示用户如果不做选择的话,默认会按照N(即保留当前版本)的方式处理。
- 配置文件sshd_config的处理
A new version (/tmp/tmp.aAfEEQVDr1) of configuration file /etc/ssh/sshd_config is available, but the version installed currently has been locally modified.
/etc/ssh/sshd_config配置文件有一个新的版本,其文件路径为/tmp/tmp.aAfEEQVDr1。然而,目前已经安装并且正在使用的该配置文件版本在本地被修改过了。这意味着可能是用户自己或者本地运行的某些程序对现有的sshd_config文件做了改动,现在又出现了一个软件包分发商提供的新的版本。
What do you want to do about modified configuration file sshd_config?
询问用户对于这个被修改过的sshd_config配置文件想要采取什么样的处理方式。
install the package maintainer's version
如果用户选择此项,系统将会安装软件包维护者(通常是指操作系统或相关软件包的分发商)提供的sshd_config配置文件的版本。这意味着将会覆盖掉当前在本地已经被修改过的版本,采用分发商认为的标准配置。不过这样做可能会丢失之前在本地所做的修改内容。
keep the local version currently installed(我选择这个)
若用户选择此项,系统会保留当前已经安装的在本地被修改过的sshd_config版本。也就是维持之前在本地所做的修改状态,不采用软件包分发商提供的新的版本。
show the differences between the versions
当用户选择此项,系统会展示出当前安装的在本地被修改过的版本和软件包分发商提供的新的版本之间的差异。这样用户可以直观地看到两个版本在内容上的不同之处,以便更好地决定是否要采用新的版本或者进一步了解两个版本的变化情况。
show a side-by-side difference between the versions
与show the differences between the versions类似,也是展示两个版本之间的差异,但可能是以一种并排对比的方式呈现,让用户能更清晰地看到每个部分在两个版本中的不同情况,便于更细致地比较和分析。
show a 3-way difference between available versions
此项会展示出所有可用版本之间的三方差异。这里的可用版本可能除了当前安装的本地修改版和软件包分发商提供的新版之外,还可能涉及到其他相关的版本(比如之前备份的某个版本等),通过这种三方对比可以更全面地了解各个版本之间的关系和变化情况。
do a 3-way merge between available versions
用户选择此项后,系统会尝试对所有可用版本进行三方合并操作。也就是综合考虑各个版本的特点和内容,将它们合并成一个新的版本,可能会保留各个版本中的有用部分,以得到一个更优化的配置文件版本。不过这种合并操作可能会比较复杂,需要根据具体情况进行调整和判断。
start a new shell to examine the situation
如果用户选择此项,系统会启动一个新的shell(命令行环境),让用户能够在这个环境中进一步深入地检查当前的情况。比如用户可以在这个 shell中查看sshd_config文件的具体内容、相关的系统设置、运行一些与该配置文件相关的命令等,以便更全面地了解情况并做出合适的决策。
7. 重启系统
升级完成后,系统会提示你重启。重启你的服务器以完成升级过程:
- 检查升级结果
重启后,你可以通过以下命令检查你的Ubuntu版本:
lsb_release -a
这将显示你的系统信息,确认它现在是Ubuntu 22.04。