ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Red Hat RH134/RH294实验沙盒:角色隔离、快照机制与lab命令原理

Red Hat RH134/RH294实验沙盒:角色隔离、快照机制与lab命令原理

简介:本资源是Red Hat RHCSA(RH134)与RHCE(RH294)认证考试的官方模拟环境配置说明文档,专为Linux系统管理学习者、红帽认证备考人员及IT培训讲师设计,解决实验环境搭建不清、账号权限混乱、快照恢复不明、考试流程不熟等实操痛点。文档以PDF格式呈现,共1个文件,大小398KB,内容精炼但覆盖全面:详细列出RH134(30GB/6GB内存)与RH294(60GB/8GB内存)双环境的硬件要求、四类主机角色(foundation物理机、workstation操作端、servera-d被控端、bastion网关服务端)、全链路账号密码体系(root/Asimov、student/student、kiosk/redhat等),并详解rht-vmctl启停、virt-manager Console登录、exam-setup/exam-grade模拟考试评分等关键指令。目前已有291人学习下载,是快速复现RHEL 8.0标准培训环境、开展靶向练习与闭环自测的必备参考。

1. RH134/RH294环境不是“装完就能练”的虚拟机套组,而是一套带状态快照、角色分工、权限隔离的考试级实验沙盒

很多人第一次点开 RH134 或 RH294 的百度网盘链接,下完 30G/60G 镜像、解压、导入 VirtualBox/VMware,看到 foundation 启动成功就以为“环境搭好了”——结果一跑lab start networking就报错,exam-grade返回空结果,servera连不上 bastion,甚至 console 登录后发现/etc/yum.repos.d/里仓库全空。这不是你手速慢或配置错,而是没看清这套环境的本质:它根本不是普通 Linux 虚拟机集合,而是一个预设角色链 + 状态快照驱动 + 权限收敛控制的闭环实验系统。foundation 不是“宿主机”,它是调度中枢;bastion 不是“随便配个代理”,它是唯一可信源;workstation 不是“你的终端”,它是被严格限制的执行边界。RH134 对应 RHCSA 8.0 基础能力验证(用户管理、存储挂载、防火墙策略、服务启停),RH294 则叠加了 Ansible 自动化编排、容器基础、SELinux 策略调试、高可用集群等 RHCE 级实战场景。二者共用同一套底层架构,但 RH294 多出 serverc/serverd 和三快照机制,意味着你必须在“初始化→RHCSA→RHCE”之间主动切换状态,否则 lab 命令会因依赖缺失直接失败。适合两类人:正在系统备考 RHCSA/RHCE 的学员(需按考纲节奏推进),以及带实验课的某高校 Linux 系统管理课程导师(需复现标准评分逻辑)。这张地图的核心不是“怎么装”,而是“谁在什么状态下能对谁做什么”。

2. RH134 环境:RHCSA 8.0 实验沙盒的四层角色与七类关键操作

RH134 环境虽标称“基础”,但其角色设计之严密、状态耦合之紧密,在同类培训环境中实属少见。它不靠文档堆砌讲原理,而是用物理隔离+命令白名单+服务预置,把 RHCSA 考纲中 20+ 个核心技能点全部锚定到具体主机行为上。理解这四层角色关系,是避免“命令能输、结果不对”的第一道门槛。

2.1 四层角色定义:foundation 是调度器,不是宿主机

很多初学者误把foundation当作普通 Linux 主机去改配置、装软件、调网络——这是 RH134 翻车率最高的起点。实际上,foundation在整套环境里承担的是虚拟机生命周期控制器 + 统一认证网关 + 时间同步源三重角色,而非你的操作终端。

  • foundation(物理机):运行 KVM/QEMU,通过rht-vmctl管理所有虚拟机启停、快照、console 访问。它不参与任何 RHCSA 实验任务(如配置 httpd、管理 LVM),只提供student账户登录入口和rht-vmctl命令。其 root 密码为Asimov,但你几乎不需要用 root 登录它。
  • workstation(工作平台):这是你日常操作的主控端。它预装了lab命令行工具、ansible、vim-enhanced、bash-completion等全套实验依赖。student用户密码为student,该账户被严格限制:不能sudo su -,不能修改/etc/hosts,不能卸载rht-lab包。所有lab start xxx操作都从此发起,并自动向 servera/b 下发配置。
  • servera / serverb(被控服务器):RHCSA 实验的靶机。它们无图形界面,仅开放 SSH(端口 22)和 console 访问。root密码统一为redhat,student密码也为redhat(注意:与 workstation 的 student 密码不同)。二者角色有隐含分工:servera 通常承担 Web 服务、NFS 服务等“对外提供能力”的角色;serverb 更多用于测试客户端行为、防火墙策略验证、时间同步等“响应侧”任务。
  • bastion(网关系统):这是整个环境的“信任根”。它不暴露公网 IP,但作为内部网络的唯一出口,提供:
    • 本地 YUM 仓库(http://bastion/content/rhel8/),所有主机默认指向此源;
    • 实验所需 RPM 包(如httpd-manual、mariadb-server)和配置模板(/var/www/html/labfiles/);
    • DNS 解析服务(bastion解析为172.25.254.254);
    • 路由转发(servera/b 通过 bastion 访问外网)。

提示:bastion的root密码也是redhat,但除非调试网络连通性,否则不应登录 bastion 手动改配置。它的状态由rht-vmctl快照固化,手动修改会导致后续lab check失败。

2.2 七类关键操作:从启动到排错的完整链路

RH134 的操作流高度结构化,每一步都对应考纲能力点。以下七类操作覆盖 95% 日常使用场景,参数和路径不可省略:

2.2.1 启动全部虚拟机(必须第一步)
[kiosk@foundation0 ~]$ rht-vmctl start all # 输出应包含: # Starting foundation0 # Starting workstation # Starting servera # Starting serverb # Starting bastion

此命令非systemctl start libvirtd,而是 Red Hat 官方封装的调度脚本,会校验磁盘空间、内存分配、KVM 模块加载状态。若报错ERROR: Not enough memory available,说明你给 foundation 分配的内存 <6G(实际建议 8G),需在虚拟机设置中调整。

2.2.2 登录 servera/serverb 的两种方式
  • SSH 方式(推荐日常操作):

    [student@workstation ~]$ ssh student@servera # 密码 redhat [student@servera ~]$ sudo -i # 切换 root,密码 redhat
  • Console 方式(仅用于紧急恢复):

    [kiosk@foundation0 ~]$ virt-manager # 图形界面中双击 servera → View → Console # 或命令行: [kiosk@foundation0 ~]$ virsh console servera # 按 Enter 触发 login prompt,输入 root/redhat

注意:console 登录后若卡在login:无响应,大概率是 servera 的getty服务未启动,需在 foundation 上执行rht-vmctl reset servera强制重启。

2.2.3 执行并验证实验(lab 命令核心逻辑)

lab命令本质是 Python 脚本,位于/usr/bin/lab,它读取/usr/share/rht-lab/下的 YAML 描述文件,自动完成“下发配置→启动服务→校验端口→检查文件内容”全流程。

[student@workstation ~]$ lab start networking # 启动 networking 实验:配置 servera 的静态 IP、DNS、主机名 [student@workstation ~]$ lab check networking # 校验:检查 servera 的 /etc/sysconfig/network-scripts/ifcfg-eth0、hostname、/etc/resolv.conf [student@workstation ~]$ lab finish networking # 清理:还原 servera 网络配置至初始状态

关键点:lab start不等于“开始做题”,而是“部署标准答案环境”;lab check才是“自动批改”。若lab check失败,不要手动改配置,先lab finish再lab start重置。

2.2.4 查看实验列表与帮助
[student@workstation ~]$ lab list # 列出所有可用实验名(如 networking, storage, users) [student@workstation ~]$ lab info networking # 显示 networking 实验的目标、所需技能、检查项清单

lab info输出中Verification steps部分即为考纲原文映射,例如Verify that the hostname is set to servera.lab.example.com直接对应 RHCSA 考试 Task 1.1。

2.2.5 重置单台主机(比 reboot 更彻底)

当 servera 服务异常且lab finish无效时,用rht-vmctl强制重置:

[kiosk@foundation0 ~]$ rht-vmctl reset servera # 等效于:关机 → 删除内存镜像 → 从磁盘快照重新加载 # 比 virsh destroy + virsh start 更干净,避免残留进程
2.2.6 检查网络连通性(跨主机通信黄金路径)

RHCSA 实验大量依赖主机间通信,标准验证链为:

# 从 workstation 测试: [student@workstation ~]$ ping -c 3 bastion # 必须通(172.25.254.254) [student@workstation ~]$ ping -c 3 servera # 必须通(172.25.254.10) [student@workstation ~]$ ssh student@servera # 必须免密或密码登录成功 # 从 servera 测试反向: [student@servera ~]$ curl -I http://bastion/content/rhel8/ # 应返回 HTTP/1.1 200 OK,证明 YUM 仓库可达

若ping bastion失败,90% 是 workstation 的/etc/hosts被误改,正确内容应含:

172.25.254.254 bastion.lab.example.com bastion
2.2.7 修复 YUM 仓库(最常触发的“环境失效”)

当dnf install httpd报错Failed to download metadata for repo 'baseos',本质是 servera 无法访问 bastion 的仓库。修复步骤:

# 1. 确认 servera 能解析 bastion [student@servera ~]$ host bastion # 应返回 172.25.254.254 # 2. 检查仓库配置 [student@servera ~]$ cat /etc/yum.repos.d/rhel8.repo # 正确 baseurl 应为: # baseurl=http://bastion/content/rhel8/BaseOS/ # 3. 清理缓存并重试 [student@servera ~]$ sudo dnf clean all [student@servera ~]$ sudo dnf makecache

若host bastion失败,需检查 servera 的/etc/resolv.conf是否指向172.25.254.254(即 bastion 自身 DNS)。

2.3 易漏点:RH134 环境中 5 个最易忽略却导致全盘失败的细节

这些点在官方文档里往往一笔带过,但实操中 80% 的“环境打不开”“lab 不生效”都源于此。它们不难,但一旦漏掉,后续所有操作都是徒劳。

易漏点 1:foundation 的内存分配不足 6G,导致rht-vmctl start all静默失败

→ 为什么漏:VirtualBox/VMware 默认给新虚拟机分配 2G 内存,而rht-vmctl启动时若检测到总内存 <6G,会跳过启动 servera/b/bastion,只起 foundation 和 workstation,且不报错。你看到 workstation 起来了,就以为“环境好了”。
→ 怎么补:关机 → 进入虚拟机设置 → 将 foundation 内存调至 8G → 重启 foundation → 再执行rht-vmctl start all并观察输出是否包含全部五台主机。

易漏点 2:workstation 的/etc/hosts被手动修改,破坏了lab命令的主机名解析

→ 为什么漏:lab脚本内部硬编码了servera.lab.example.com等 FQDN,它不查 DNS,而是直接读/etc/hosts。若你为调试删了bastion.lab.example.com行,lab start apache会因无法解析 bastion 而卡住。
→ 怎么补:在 workstation 上执行sudo cp /usr/share/rht-lab/hosts /etc/hosts还原标准 hosts 文件(该文件由 Red Hat 预置,含全部 5 台主机映射)。

易漏点 3:servera 的 SELinux 状态被意外禁用,导致httpd无法绑定 80 端口

→ 为什么漏:RHCSA 考纲明确要求“SELinux 必须处于 enforcing 模式”,但lab start apache不校验此状态。若你之前为调试执行过sudo setenforce 0,后续curl http://servera会超时,因为httpd进程被 SELinux 策略阻止绑定端口。
→ 怎么补:登录 servera,执行sudo getenforce(应返回Enforcing);若为Permissive或Disabled,执行sudo setenforce 1,再sudo systemctl restart httpd。

易漏点 4:student用户在 workstation 上未用ssh-copy-id配置 servera 免密,导致lab命令反复索要密码

→ 为什么漏:lab命令内部大量使用ssh student@servera执行远程命令,若每次都要输密码,不仅效率低,某些实验(如lab start ansible)会因超时直接失败。官方不教这步,但它是流畅实验的前提。
→ 怎么补:在 workstation 上执行

[student@workstation ~]$ ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa [student@workstation ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub student@servera # 输入密码 redhat,完成后即可无密码 ssh
易漏点 5:bastion的防火墙未放行 HTTP,导致 workstation 无法下载实验包

→ 为什么漏:bastion 默认运行firewalld,但其publiczone 未开放http服务。当你在 workstation 执行dnf install -y lab-extras时,会因连接http://bastion/content/rhel8/超时而失败,错误信息模糊(显示Failed to synchronize cache for repo 'baseos'),让人误以为是 YUM 配置问题。
→ 怎么补:登录 bastion(ssh root@bastion,密码 redhat),执行

[root@bastion ~]# firewall-cmd --permanent --add-service=http [root@bastion ~]# firewall-cmd --reload

3. RH294 环境:RHCE 8.0 的三快照机制与 Ansible 自动化实验链

RH294 不是 RH134 的简单扩容版,而是以“自动化驱动运维”为核心重构的实验体系。它引入 serverc/serverd 扩展被控节点规模,更关键的是用三快照机制将 RHCSA 基础能力、RHCE 进阶能力、考试原始状态完全解耦。这意味着你不能再像 RH134 那样“一路练下去”,而必须理解每个快照的语义边界——选错快照,lab start ansible会因缺少 inventory 文件直接退出,exam-grade会返回No tasks found。

3.1 三快照语义:初始化是“出厂设置”,RHCSA 是“基础考场”,RHCE 是“工程师沙盒”

RH294 的foundation虚拟机内置三个 Libvirt 快照,它们不是备份点,而是能力基线声明。快照切换会重置所有虚拟机(包括 workstation)的磁盘状态,但保留 foundation 的内存分配和网络配置。

快照名触发命令主要特征适用场景
initialrht-vmctl snapshot-revert initial所有主机为纯净 RHEL 8.0 安装状态:无student用户、无lab命令、无预置仓库、无 Ansible 配置。bastion 仅提供基础路由。环境首次部署后校验;遭遇严重损坏(如误删/usr/bin/lab)时回退;导师重置教学环境。
rhcsarht-vmctl snapshot-revert rhcsa等同于 RH134 环境:已创建student用户、预装rht-lab、bastion 启用 YUM 仓库、workstation 配置好 SSH 免密。但无 serverc/serverd,ansible未配置 inventory。专注 RHCSA 考纲练习(用户、存储、服务管理);无需 Ansible 的纯系统管理实验。
rhcerht-vmctl snapshot-revert rhceRH294 完整态:serverc/serverd 已启动;workstation 的/home/student/ansible/下预置inventory(含 servera/b/c/d)、playbooks/目录;bastion 开放httpd服务供 playbook 下载文件;ansible命令可直接运行。RHCE 考纲全部实验(Ansible Playbook 编写、角色开发、容器基础、SELinux 故障排除);模拟考试环境。

提示:rht-vmctl snapshot-revert命令必须在 foundation 的kiosk用户下执行,且执行后需等待 60 秒让所有虚拟机完成磁盘状态同步,再登录 workstation。切勿在 revert 过程中强制关闭虚拟机。

3.2 RHCE 核心实验链:从 Inventory 构建到 Playbook 评分的闭环

RH294 的实验不再以单机服务为中心,而是围绕 Ansible 自动化流水线展开。一个典型 RHCE 实验(如lab start apache)会驱动 workstation→servera/b/c/d 的完整协作,其背后是预置的 YAML 文件和 Python 校验器。

3.2.1 Inventory 结构:四台服务器的角色分工

workstation 的/home/student/ansible/inventory文件定义了被控节点分组,这是所有 Ansible 实验的起点:

# /home/student/ansible/inventory [webservers] servera.lab.example.com serverb.lab.example.com [dbservers] serverc.lab.example.com [all:vars] ansible_user=student ansible_password=redhat ansible_ssh_common_args='-o StrictHostKeyChecking=no'

关键点:

  • webservers组用于部署 Apache/Nginx 等 Web 服务;
  • dbservers组专用于 MariaDB/PostgreSQL 等数据库服务;
  • serverd未出现在任何组,是预留的“故障注入点”(如lab start troubleshooting会故意让 serverd 的sshd崩溃,供你用ansible远程修复);
  • all:vars中的ansible_password是明文,因 RH294 禁用 SSH 密钥认证(避免学生绕过密码策略)。
3.2.2 Playbook 执行与校验(以apache实验为例)

lab start apache实际执行流程:

  1. 下发 Playbook:将/usr/share/rht-lab/playbooks/apache.yml复制到/home/student/ansible/playbooks/;
  2. 运行 Playbook:
    [student@workstation ~]$ cd ~/ansible [student@workstation ansible]$ ansible-playbook playbooks/apache.yml # 该 Playbook 会: # - 在 webservers 组安装 httpd、启动服务、启用开机自启; # - 复制预置的 index.html 到 /var/www/html/; # - 配置 firewall 允许 http 服务;
  3. 自动校验:lab check apache会:
    • 在 workstation 上curl http://servera检查返回码;
    • SSH 到 servera 执行sudo systemctl is-active httpd;
    • 检查 servera 的/var/www/html/index.html内容是否匹配预期哈希值。

若校验失败,lab finish apache会运行/usr/share/rht-lab/playbooks/apache-finish.yml彻底清理,包括卸载httpd、删除/var/www/html/、重置 firewall。

3.2.3 容器实验:Podman 替代 Docker 的 RHCE 新考点

RH294 8.0 已全面弃用 Docker,改用 Podman(无守护进程、rootless 支持)。相关实验(如lab start containers)要求:

  • 在 servera 上以student用户运行容器(非 root):
    [student@servera ~]$ podman run -d --name web -p 8080:80 nginx:latest # 注意:无需 sudo,且 -p 参数需指定 host:container 端口映射
  • 验证容器网络:curl http://localhost:8080必须返回 Nginx 欢迎页;
  • 持久化容器:podman commit web myweb创建新镜像;
  • 推送至 bastion 的本地 registry(podman push myweb localhost:5000/myweb)。

提示:servera 的/etc/containers/registries.conf已预置localhost:5000为 insecure registry,无需额外配置。

3.2.4 SELinux 故障排除实验:从setroubleshoot到audit2why

RHCE 考纲新增 SELinux 深度调试,lab start selinux会故意禁用httpd_can_network_connect布尔值,导致httpd无法反向代理。标准排错链:

# 1. 查看拒绝日志 [student@servera ~]$ sudo ausearch -m avc -ts recent | audit2why # 2. 生成修复策略 [student@servera ~]$ sudo ausearch -m avc -ts recent | audit2allow -M myhttpd # 3. 加载策略模块 [student@servera ~]$ sudo semodule -i myhttpd.pp # 4. 临时启用布尔值(考试允许) [student@servera ~]$ sudo setsebool -P httpd_can_network_connect on

audit2why输出会明确告知:“httpd needs network connect permission to work as reverse proxy”,直指考纲能力点。

3.3 易错点:RH294 中 4 个 Ansible 相关的“玄学失败”及定位方法

RH294 的 Ansible 实验失败,80% 不是语法错,而是环境状态错。这些错误现象诡异(如ansible-playbook无输出、lab check返回skipped),根源却极简单。

易错点 1:lab start后ansible-playbook报错ERROR! the file_name.yml does not exist

→ 为什么错:lab start命令会将 Playbook 复制到~/ansible/playbooks/,但若你之前手动删过该目录,或lab finish未清干净,lab start不会重建空目录。ansible-playbook默认在当前目录找文件,而你可能在~下执行。
→ 怎么查:执行ls -l ~/ansible/playbooks/,确认apache.yml存在;若为空,手动执行cp /usr/share/rht-lab/playbooks/apache.yml ~/ansible/playbooks/。

易错点 2:ansible-playbook执行时卡在GATHERING FACTS,10 分钟无响应

→ 为什么错:workstation 的/etc/ansible/ansible.cfg中fact_caching_timeout = 86400(24 小时),但 servera 的python3-libselinux包损坏,导致setup模块无法收集 facts。Ansible 会无限重试。
→ 怎么查:在 workstation 上加-vvv参数运行:

ansible-playbook -vvv playbooks/apache.yml # 观察最后一条日志是否为 "FAILED! => {"msg": "The module failed to execute correctly"}" # 若是,登录 servera 执行 `python3 -c "import selinux; print(selinux.is_selinux_enabled())"`,若报错 ImportError,说明包损坏。 → 怎么补:在 servera 上执行 `sudo dnf reinstall python3-libselinux -y`。 #### 易错点 3:`lab check` 返回 `TASK [Check if httpd is running] skipped: true`,但服务明明在运行 → 为什么错:`lab check` 脚本内部使用 `ansible` 命令调用 `service_facts` 模块,但若 workstation 的 `/etc/ansible/hosts` 文件存在(非 inventory),`ansible` 会优先读它而非 `~/ansible/inventory`,而 `/etc/ansible/hosts` 是空的,导致 `service_facts` 无目标主机。 → 怎么查:执行 `ls -l /etc/ansible/hosts`,若存在则立即删除:`sudo rm /etc/ansible/hosts`。RH294 要求所有实验必须用 `~/ansible/inventory`。 #### 易错点 4:`podman run` 报错 `Error: unable to find "slirp4netns"`,容器无法启动 → 为什么错:`slirp4netns` 是 Podman rootless 模式的网络后端,RH294 的 servera 预装了它,但若你用 `sudo` 运行 `podman`,会切换到 root namespace,而 root 下未安装 `slirp4netns`。 → 怎么查:执行 `which slirp4netns`,若返回空,则说明 root 用户未安装;执行 `podman info | grep -A 5 "network"` 查看当前网络驱动。 → 怎么补:**永远不要用 sudo 运行 podman**。确保以 `student` 用户执行,且 `id -u` 返回 1000。若仍报错,执行 `sudo dnf install -y slirp4netns`(为 root 安装,但不推荐)。 ## 4. 模拟考试系统:`exam-setup` 与 `exam-grade` 的黑匣子逻辑拆解 RH134/RH294 的终极价值不在日常练习,而在无限次模拟考试。`exam-setup` 和 `exam-grade` 这两个命令看似简单,实则是 Red Hat 官方评分引擎的前端封装,其内部逻辑决定了你能否真实还原考试体验。理解它们,等于拿到 RHCSA/RHCE 考试的“阅卷标准”。 ### 4.1 `exam-setup`:不是初始化环境,而是加载考题约束集 `exam-setup` 命令绝非 `rht-vmctl reset` 的别名。它在 foundation 的 `kiosk` 用户下执行,作用是**将当前快照状态映射为考试题目集,并注入评分规则**。其执行过程分为三阶段: #### 阶段 1:快照绑定与题目加载 - 若当前为 `rhce` 快照,`exam-setup` 会从 `/usr/share/rht-lab/exams/rhce/` 加载 20+ 道 RHCE 题目描述(YAML 格式); - 若为 `rhcsa` 快照,则加载 `/usr/share/rht-lab/exams/rhcsa/` 下的 15 道 RHCSA 题目; - 题目文件名即为 `lab` 命令名(如 `users.yml` 对应 `lab start users`),内容含 `task_id`、`description`、`verification_steps`。 #### 阶段 2:环境预检与约束注入 `exam-setup` 会静默运行一系列预检: - 检查 workstation 的 `/home/student/ansible/` 是否存在(RHCE 必需); - 检查 servera 的 `/etc/httpd/conf.d/` 是否为空(确保无残留配置干扰); - 检查 bastion 的 `httpd` 服务是否运行(提供考题附件下载); - 若任一检查失败,`exam-setup` 会输出 `WARNING: Bastion httpd not running. Exam may fail.` 并继续,但后续 `exam-grade` 可能因无法下载附件而跳过部分题目。 #### 阶段 3:生成动态 inventory(RHCE 专属) 对 RHCE 考试,`exam-setup` 会重写 `/home/student/ansible/inventory`,添加考试专用变量: ```ini [webservers] servera.lab.example.com ansible_host=172.25.254.10 [all:vars] exam_mode=true exam_start_time=1712345678

exam_mode=true是关键开关,它告诉所有lab命令:本次运行需启用考试模式(如禁用lab finish、记录操作时间戳、限制重试次数)。

4.2exam-grade:评分引擎的三层校验与失败归因

exam-grade是真正的“阅卷官”,它不看你lab start是否成功,而只校验最终状态。其评分逻辑分三层,每层失败都会给出精准归因,这是你查漏补缺的黄金线索。

层级 1:基础连通性校验(5% 分值)
  • ping -c 3 servera、ping -c 3 bastion必须全通;
  • ssh -o ConnectTimeout=5 student@servera必须在 5 秒内建立连接;
  • 若失败,输出CRITICAL: Network connectivity to servera failed,直接扣 5 分,不进入后续校验。
层级 2:服务状态与配置校验(70% 分值)

对每道题目(如users),exam-grade执行预定义的 Python 校验器:

# /usr/share/rht-lab/exams/rhcsa/users.py def verify(): # 检查用户是否存在 result = subprocess.run(['id', 'alice'], capture_output=True) if result.returncode != 0: return False, "User alice not found" # 检查用户家目录权限 stat = os.stat('/home/alice') if stat.st_mode & 0o777 != 0o700: return False, "Home directory permissions incorrect" return True, "OK"

exam-grade会捕获return False的字符串,直接输出为失败原因,如FAIL: User alice not found。

层级 3:Ansible Playbook 执行结果校验(RHCE 专属,25% 分值)

对 RHCE 题目,exam-grade会:

  • 以student用户执行ansible-playbook /home/student/ansible/playbooks/exam-users.yml;
  • 检查 Playbook 的PLAY RECAP中servera行的failed=0、changed>=1;
  • 若failed>0,提取stderr中第一行错误(如"fatal: [servera]: FAILED! => {\"msg\": \"user alice not found\"}"),精简为FAIL: user alice not found。

提示:exam-grade输出中SKIPPED表示该题目未被触发(如你未运行lab start users),FAILED表示校验失败,OK表示通过。分数按题目权重累加,满分 100。

4.3 模拟考试实操:从登录到交卷的完整流程(附避坑清单)

一次标准模拟考试需严格遵循以下流程,任何跳步都会导致exam-grade无法识别你的答案。

步骤 1:选择快照并启动
# 在 foundation 的 kiosk 用户下 [kiosk@foundation0 ~]$ rht-vmctl snapshot-revert rhce # 选 RHCE 考试 [kiosk@foundation0 ~]$ rht-vmctl start all # 等待 90 秒,确认所有主机启动完成
步骤 2:登录并运行 exam-setup
# 在 workstation 的 student 用户下 [student@workstation ~]$ ssh kiosk@foundation0 # 密码 redhat [kiosk@foundation0 ~]$ exam-setup # 输出应含 "Exam setup complete. You may now begin."
步骤 3:逐题执行 lab(关键:必须用 student 用户!)
# 切回 workstation 的 student 用户(不要在 foundation 上操作) [student@workstation ~]$ lab start users [student@workstation ~]$ lab start storage [student@workstation ~]$ lab start apache # 每题完成后,用 lab check 验证,但不要 lab finish(考试中不允许清理)
步骤 4:运行 exam-grade 交卷
# <p> <a href="https://download.csdn.net/download/m0_69309069/86840894" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进