通过SSH升级的风险是什么?

当我跑步时
sudo do-release-upgrade

通过ssh,我收到了以下消息。
此会话似乎正在ssh下运行。目前不建议通过ssh进行升级,因为如果失败的话,恢复起来会更困难。
如果继续,将在端口'9004'启动一个额外的ssh守护进程。 您是否要继续?

通过ssh进行升级的真正风险是什么?额外的ssh守护进程如何帮助减轻这个风险?


如果我们正在使用远程服务器,我猜没有真正的替代品可以取代SSH,所以这条消息看起来无用。我猜通过Web浏览器的VNC恢复终端进行升级仍然比使用SSH要好。但是,如果我们在本地计算机上使用LXC容器,则可以使用命令lxc-attach或lxc-console作为SSH的替代方案。 - baptx
4个回答

@Marco-Ceppi的解决方案已经集成到do-release-upgrade中。
当你运行do-release-upgrade时,它会自动启动一个screen会话。如果你的ssh会话断开了,你可以恢复安装。你只需要打开一个新的ssh会话,然后再次运行do-release-upgrade。它会重新连接到你之前的安装。
第二个风险是,@sepp2k指出你的sshd服务器可能需要升级,并且可能无法正确重启。因此,升级程序会在指定的端口上运行第二个守护进程。在继续之前,你应该检查你的网络配置,确保你可以通过这个端口访问。
祝你好运。
此外,do-release-upgrade自动启动的screen会话是在root帐户下运行的,所以如果你自己的screen会话崩溃了,你可以通过运行sudo screen -x来恢复,如果(由于某种原因)命令do-release-upgrade不能自动恢复,这似乎是常见情况。

1你知道从哪个版本的Ubuntu开始出现这种情况吗?我正在尝试从9.10升级,启动升级(sudo do-release-upgrade)并回答“是”后,我可以通过9004端口连接到ssh,但在尝试sudo screen -list时没有列出任何屏幕会话。(附言:我还没有完成下载阶段。) - mgd
7在从9.10升级到10.04 LTS之后(其中“do-release-upgrade”没有启动一个屏幕会话),我现在正在从10.04 LTS升级到12.04 LTS,并且现在,“do-release-upgrade”会自动启动一个屏幕会话。 - mgd
2所以基本上,do-release-upgrade会在事先处理好一切,然后:1)你可以在重新登录后重新运行do-release-upgrade来重新连接断开的ssh,2)你可以通过do-release-upgrade指定的端口重新登录失败的sshd升级。就是这样吗? - Juh_
6sudo screen -x 拯救了我的生命!谢谢。 - Felipe
8那为什么警告信息还在那里呢?听起来很不祥。 - James John McGuire 'Jahmic'
3确保安装了 screen,因为只有安装了它才能使用。您可能需要使用 apt-get install screen 命令来安装它。至少这是我在从 Ubuntu 17.10 升级到 18.04 时意识到的。第一次尝试时我没有安装 screen 并且没有使用它。在下载之前停止升级,安装了 screen,然后再次运行 do-release-upgrade。然后 screen 就被使用了。 - Peter

我建议的做法是在服务器上启动一个 screen 会话,然后在 screen 中运行升级操作 - 这样,如果你的 SSH 会话意外断开,升级过程不会停止。

Screen 是一个允许在一台机器上保持持久终端的程序。因此,您可以启动一个 screen 会话,并且只要该机器上存在该 screen 会话(以及其历史记录、正在运行的程序等),即使没有用户登录到该机器上,它仍将继续运行。它是在 X Server 出现之前的早期设计中提供多窗口文本终端的。您可以使用 APT 安装它:

sudo apt-get install screen

所以你可以通过ssh登录到你的服务器,启动screen,启动升级过程,而不用担心因为失去网络连接或计算机崩溃导致升级失败。

1屏幕是这种情况下的绝佳工具。 - Ryan C. Thompson
11似乎自从Precise版本开始,do-release-upgrade命令会自动执行screen - manu
2屏幕不再可用,并且由于某种原因,它似乎无法与TMUX一起工作。它返回以下错误:===命令以退出状态1终止(2016年10月19日21:14:13)=== - Gradyn Wursten
使用screen -dmS do-release-upgrade命令创建一个后台运行的屏幕会话。使用screen -r命令切换到正在运行的屏幕会话。按下Ctrl + A,然后按下Ctrl + D离开屏幕会话并将其保持在后台运行,返回到主屏幕。 - Ryan Allen
我的第一反应是使用screen,但后来我感到害怕,担心在升级过程中可能会被终止(而SSH则更直观地处理这个问题,因为它的守护进程与实际服务分离)。这里有没有人真正使用screen进行升级而没有遇到问题? - aggregate1166877

如果在升级过程中安装了新版本的ssh守护程序,它将会被重新启动。如果由于某种原因更新导致守护程序崩溃,它将无法再次启动,您将无法登录到机器上。
通过启动一个独立的sshd,该sshd不受init系统控制,因此在升级期间不会重新启动,可以确保旧版本的sshd仍在运行,即使新版本无法启动。因此,您仍然可以登录到系统并查看导致守护程序崩溃的原因。

1我认为更重要的是,当守护进程重新启动时,你的升级很可能会未完成终止,因为该进程正在运行于 SSH 会话中。 - Malabarba
在通过SSH登录到一台机器时重新启动ssh守护进程不会终止你的SSH会话。这是SSH的一个非常棒的功能之一。你有没有遇到过在升级过程中出现这种失败的经历? - aggregate1166877

我从来没有(至今)在这方面遇到过问题,尽管我只是用这种方式升级了大约六个左右的盒子。只是如果出现问题,额外的SSH守护进程可能是你唯一避免访问(或使用任何远程重新安装选项)的希望。