使用串行控制台访问 GRUB 和单用户模式

注意

本文中引用的 CentOS 是 Linux 发行版, (EOL) 将达到生命周期结束。 相应地考虑使用和计划。 有关详细信息,请参阅 CentOS 生命周期终止指南

在启动虚拟机 (VM) 时,可能会首先看到 GRand Unified Bootloader (GRUB) 。 由于它在操作系统启动之前显示,因此无法通过 SSH 访问 GRUB。 在 GRUB 中,可以修改启动配置以启动到单用户模式等。

单用户模式是功能最少的最小环境。 它可用于调查启动问题、文件系统问题或网络问题。 可以在后台运行的服务更少,并且根据运行级别,文件系统甚至可能不会自动装载。

如果 VM 可能配置为仅接受用于登录的 SSH 密钥,则单用户模式也很有用。 在这种情况下,你可能能够使用单用户模式创建具有密码身份验证的帐户。

注意

串行控制台服务仅允许具有参与者级别或更高权限的用户访问 VM 的串行控制台。

若要进入单用户模式,请在 VM 启动时输入 GRUB,并在 GRUB 中修改启动配置。 请参阅下一节中有关输入 GRUB 的详细说明。 通常,如果 VM 已配置为显示 GRUB,则可以使用 VM 串行控制台中的重启按钮重启 VM 并显示 GRUB。

工具栏中显示的“重启 VM”按钮的屏幕截图。

常规 GRUB 访问

若要访问 GRUB,请在“串行控制台”窗格打开时重新启动 VM。 某些分发版需要键盘输入才能显示 GRUB,而其他分发版则会自动显示 GRUB 几秒钟,以允许用户键盘输入取消超时。

为了能够访问单用户模式,需要确保在 VM 上启用 GRUB。 根据你的分布情况,可能需要执行一些设置工作来确保启用 GRUB。 有关特定于分发的信息,请参阅下一部分。

重启 VM 以访问串行控制台中的 GRUB

可以在串行控制台中重启 VM,方法是将鼠标悬停在“ 重启” 按钮上,然后选择“ 重启 VM”。 窗格底部会显示有关重启的通知。

如果启用了 SysRq,还可以通过运行 SysRq “b”命令来重启 VM。 若要了解重启时 GRUB 的预期情况,请参阅后续部分中特定于分发的说明。

动态 GIF 显示命令行界面。用户在工具栏中选择“重启 VM”,然后重启串行控制台中的 V M。

常规单用户模式访问

如果尚未为帐户配置密码身份验证,则可能需要手动访问单用户模式。 修改 GRUB 配置以手动进入单用户模式。 完成此操作后,请参阅“使用单用户模式重置或添加密码”部分了解进一步的说明。

如果 VM 无法启动,分发版通常会自动进入单用户模式或紧急模式。 但是,其他分发版需要额外的设置(例如设置根密码),然后才能自动将你放入单用户模式或紧急模式。

使用单用户模式重置或添加密码

处于单用户模式后,通过执行以下操作添加具有 sudo 权限的新用户:

  1. 运行 useradd <username> 以添加用户。
  2. 运行 sudo usermod -a -G sudo <username> 以授予新用户的根权限。
  3. 使用 passwd <username> 设置新用户的密码。 然后,可以以新用户身份登录。

Red Hat Enterprise Linux (RHEL) 的访问权限

如果 RHEL 无法正常启动,则会自动进入单用户模式。 但是,如果尚未为单用户模式设置根访问权限,则没有根密码,并且无法登录。 有一种解决方法 (请参阅“在 RHEL 中手动进入单用户模式”部分) ,但我们建议你最初设置根访问权限。

RHEL 中的 GRUB 访问

RHEL 附带现装的 GRUB。 若要输入 GRUB,请运行 sudo reboot重新启动 VM,然后按任意键。 应显示 GRUB 窗格。 如果不是,请确保 GRUB 文件 () /etc/default/grub 中存在以下行:

对于 RHEL 8

注意

Red Hat 建议使用 Grubby 在 RHEL 8+ 中配置内核命令行参数。 目前无法使用 grubby 更新 grub 超时和终端参数。 若要修改更新所有启动项的 GRUB_CMDLINE_LINUX 参数,请运行 grubby --update-kernel=ALL --args="console=ttyS0,115200 console=tty1 console=ttyS0 earlyprintk=ttyS0"此处提供了更多详细信息。

GRUB_TIMEOUT=5
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"

对于 RHEL 7

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 net.ifnames=0"

注意

Red Hat 还提供了用于启动到救援模式、紧急模式或调试模式以及重置根密码的文档。 有关说明,请参阅 启动期间终端菜单编辑

在 RHEL 中为单用户模式设置根访问权限

根用户默认处于禁用状态。 RHEL 中的单用户模式要求启用根用户。 如果需要启用单用户模式,请使用以下说明:

  1. 通过 SSH 登录到 Red Hat 系统。
  2. 切换到根目录。
  3. 通过执行以下操作为根用户启用密码:
    • 运行 passwd root (设置强根密码) 。
  4. 通过执行以下操作,确保根用户只能通过 ttyS0 登录:a。 运行 vi /etc/ssh/sshd_config,并确保 PermitRootLogIn 设置为 no。 b. 运行 vi /etc/securetty file 以仅允许通过 ttyS0 登录。

现在,如果系统启动到单用户模式,可以使用根密码登录。

或者,对于 RHEL 7.4+ 或 6.9+,若要在 GRUB 提示符中启用单用户模式,请参阅 启动到单用户模式

在 RHEL 中手动进入单用户模式

如果已按照上述说明设置了 GRUB 和根访问权限,则可以执行以下操作进入单用户模式:

  1. 若要输入 GRUB,请在重启 VM 时按 Esc。

  2. 在 GRUB 中,按 E 编辑要启动的 OS。 OS 通常在第一行列出。

  3. 找到内核行。 在 Azure 中,它以 linuxlinux16 开头

  4. 按 Ctrl+E 转到行尾。

  5. 在行的末尾,添加 systemd.unit=rescue.target

    此操作会将你启动到单用户模式。 如果要使用紧急模式,请将 systemd.unit=emergency.target 添加到行 (的末尾,而不是 systemd.unit=rescue.target) 。

  6. 按 Ctrl+X 退出,并使用应用的设置重新启动。

    系统会提示输入管理员密码,然后才能进入单用户模式。 此密码是在前面的说明中创建的密码。

    动态 GIF 显示命令行界面。用户选择服务器,找到内核行的末尾,然后输入指定的文本。

在 RHEL 中未启用根帐户的情况下进入单用户模式

如果未按照前面的说明启用根用户,仍可通过执行以下操作来重置根密码:

注意

如果使用 SELinux,则重置根密码时,请务必按照 Red Hat 文档中介绍的其他步骤进行操作。

  1. 若要输入 GRUB,请在重启 VM 时按 Esc。

  2. 在 GRUB 中,按 E 编辑要启动的 OS。 OS 通常在第一行列出。

  3. 找到内核行。 在 Azure 中,它从 linux16 开始

  4. 在行的末尾,将 rd.break 添加到行的末尾。 在内核行和 rd.break 之间留一个空格。

    此操作在控件从 initramfs 传递到 systemd之前中断启动过程,如 Red Hat 文档中所述。

  5. 按 Ctrl+X 退出,并使用应用的设置重新启动。

    重新启动后,系统会使用只读文件系统进入紧急模式。

  6. 在 shell 中,输入 mount -o remount,rw /sysroot 以重新装载具有读/写权限的根文件系统。

  7. 启动到单用户模式后,输入 chroot /sysroot 以切换到 sysroot 监狱。

  8. 现在,你已位于 root 位置,可以开始排查系统问题。

  9. 在 RHEL 中,SELinux 强制模式可保护 OS 免受任何更改。 可以运行 touch /.autorelabel 以在更改密码后重新标记文件系统。

  10. 完成后,输入 以 reboot -f 重新启动。

动画 GIF 显示在命令行界面中未在 RHEL 中启用根帐户的情况下进入单用户模式的过程。

注意

运行上述说明会将你放入紧急 shell,以便还可以执行编辑 fstab等任务。 但是,我们通常建议重置根密码并使用它进入单用户模式。

CentOS 的访问权限

与 Red Hat Enterprise Linux 非常类似,CentOS 中的单用户模式需要启用 GRUB 和根用户。

CentOS 中的 GRUB 访问

CentOS 附带现成的 GRUB 支持。 若要输入 GRUB,请通过输入 sudo reboot来重新启动 VM,然后按任意键。 此操作将显示 GRUB 窗格。

CentOS 中的单用户模式

若要在 CentOS 中启用单用户模式,请按照前面针对 RHEL 的说明进行操作。

Ubuntu 的访问权限

Ubuntu 映像不需要根密码。 如果系统启动到单用户模式,则可以在不使用其他凭据的情况下使用它。

Ubuntu 中的 GRUB 访问

若要访问 GRUB,请在 VM 启动时长按 Esc。

默认情况下,Ubuntu 映像可能不会自动显示 GRUB 窗格。 可以通过执行以下操作来更改设置:

  1. 在文本编辑器中,打开 /etc/default/grub.d/50-cloudimg-settings.cfg 文件。

  2. GRUB_TIMEOUT 值更改为非零值。

  3. 在文本编辑器中,打开 /etc/default/grub

  4. 注释掉行 GRUB_HIDDEN_TIMEOUT=1

  5. 确保有一 GRUB_TIMEOUT_STYLE=menu 条线。

  6. 运行 sudo update-grub

Ubuntu 中的单用户模式

如果 Ubuntu 无法正常启动,则会自动进入单用户模式。 若要手动进入单用户模式,请执行以下操作:

  1. 在 GRUB 中,按 E 以 (Ubuntu 条目) 编辑启动项。
  2. 查找以 linux 开头的行,然后查找 ro
  3. ro 之后添加单个,确保在单个之前和之后都有一个空格。
  4. 按 Ctrl+X 以使用这些设置重新启动,并进入单用户模式。

使用 GRUB 在 Ubuntu 中调用 bash

尝试上述说明后,可能会出现 (的情况,例如忘记根密码) 仍无法访问 Ubuntu VM 中的单用户模式。 还可以指示内核以 init 而不是系统 init 的形式运行 /bin/bash 。 此操作可提供 bash shell 并允许系统维护。 使用以下说明:

  1. 在 GRUB 中,按 E 以 (Ubuntu 条目) 编辑启动项。

  2. 查找以 linux 开头的行,然后查找 ro

  3. ro 替换为 rw init=/bin/bash

    此操作会将文件系统装载为读写,并使用 /bin/bash 作为初始化进程。

  4. 按 Ctrl+X 以使用这些设置重新启动。

CoreOS 的访问权限

CoreOS 中的单用户模式需要启用 GRUB。

CoreOS 中的 GRUB 访问

若要访问 GRUB,请在 VM 启动时按任意键。

CoreOS 中的单用户模式

如果 CoreOS 无法正常启动,会自动将你放入单用户模式。 若要手动进入单用户模式,请执行以下操作:

  1. 在 GRUB 中,按 E 编辑启动项。

  2. 查找以 linux$ 开头的行。 应该有两个行实例,每个实例封装在不同的 if...else 子句。

  3. coreos.autologin=ttyS0 追加到每个 linux$ 行的末尾。

  4. 按 Ctrl+X 以使用这些设置重新启动,并进入单用户模式。

SUSE SLES 的访问权限

如果系统启动到紧急模式,SLES 12 SP3+ 的较新映像允许通过串行控制台进行访问。

SUSE SLES 中的 GRUB 访问

SLES 中的 GRUB 访问需要通过 YaST 进行引导加载程序配置。 若要创建配置,请执行以下操作:

  1. 使用 SSH 登录到 SLES VM,然后运行 sudo yast bootloader。 按 Tab,按 Enter,然后使用箭头键在菜单中导航。

  2. 转到“内核参数”,然后选择“使用串行控制台检查”框。

  3. 将 添加到 serial --unit=0 --speed=9600 --parity=noConsole 参数。

  4. 按 F10 保存设置并退出。

  5. 若要输入 GRUB,请重新启动 VM,并在启动过程中按任意键以保持显示 GRUB 窗格。

    GRUB 的默认超时为 1s。 可以通过更改 GRUB_TIMEOUT/etc/default/grub 文件中的变量来修改此设置。

动画 GIF 显示通过 YaST 创建引导加载程序配置的过程。

SUSE SLES 中的单用户模式

如果 SLES 无法正常启动,则会自动进入紧急外壳。 若要手动进入紧急 shell,请执行以下操作:

  1. 在 GRUB 中,按 E 以 (SLES 条目) 编辑启动项。

  2. 查找以 linux 开头的内核行。

  3. systemd.unit=emergency.target 追加到内核行的末尾。

  4. 按 Ctrl+X 以使用这些设置重新启动,并输入紧急 shell。

    注意

    此操作会将你放入具有只读文件系统的紧急 shell。 若要编辑任何文件,请重新装载具有读写权限的文件系统。 为此,请在 shell 中输入 mount -o remount,rw /

Oracle Linux 的访问权限

与 Red Hat Enterprise Linux 非常类似,Oracle Linux 中的单用户模式需要启用 GRUB 和根用户。

Oracle Linux 中的 GRUB 访问

Oracle Linux 附带现装的 GRUB。 若要输入 GRUB,请运行 sudo reboot重新启动 VM,然后按 Esc。此操作将显示 GRUB 窗格。 如果未显示 GRUB 窗格,请确保行的值 GRUB_TERMINAL 包含 串行控制台 (即 GRUB_TERMINAL="serial console") 。 使用 grub2-mkconfig -o /boot/grub/grub.cfg重新生成 GRUB。

Oracle Linux 中的单用户模式

若要在 Oracle Linux 中启用单用户模式,请按照前面针对 RHEL 的说明进行操作。

后续步骤

若要详细了解串行控制台,请参阅:

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。