在日常的 Linux 运维工作中保持系统更新是至关重要的。最近在维护 Red Hat Enterprise Linux (RHEL) 10 系统时,我遇到了一个让人头疼的问题:执行 dnf update 命令时,系统反复报出“Status code: 403 Forbidden”的错误。尽管 subscription-manager 显示系统已注册,但软件仓库的访问权限似乎被拒绝了。
1. 问题现象:dnf update 403 错误
我在终端执行系统更新命令 dnf update 时,出现了以下错误信息:
dnf update
系统报错:
Errors during downloading metadata for repository 'rhel-10-for-x86_64-appstream-rpms':
- Status code: 403 for https://cdn.redhat.com/content/dist/rhel10/10/x86_64/appstream/os/repodata/repomd.xml
Error: Failed to download metadata for repo 'rhel-10-for-x86_64-appstream-rpms': Cannot download repomd.xml: All mirrors were tried
报错中的“Status code: 403”是关键线索。在 HTTP 协议中,403 状态码意味着“权限被禁止”。这表明我的请求已成功发送至 Red Hat 服务器,但服务器因权限问题拒绝了我的访问。
2. 初步排查
既然是权限问题,我首先想到了系统订阅状态。执行 subscription-manager status 命令后,结果显示一切正常:
subscription-manager status
Overall Status: Registered
这让我陷入了困惑。系统明明显示已注册,无法访问官方仓库?这说明本地的注册信息可能存在异常或缓存失效。
为了尝试修复,我决定重新注册 Insights 客户端:
insights-client --unregister
insights-client --register
但新的问题出现了:
Machine-id found, insights-client can not be registered. Please, unregister insights-client first
系统中的某些残留信息阻止了重新注册,即使我已尝试注销。这进一步证实了问题出在本地已损坏或过时的注册数据上。
3. 解决步骤:彻底清除并重新注册
步骤一:清除本地订阅数据
使用 subscription-manager clean 命令,该命令会移除所有本地存储的订阅和授权信息
subscription-manager clean
执行后,终端会返回 All local data removed,这表明旧的、可能已损坏的授权数据已经被彻底清除。
步骤二:重新注册系统
清除数据后,系统将处于未注册状态。我们可以使用 subscription-manager register 命令进行重新注册,并输入正确的 Red Hat 账户凭据。
subscription-manager register
系统会提示输入用户名和密码,注册成功后会返回新的系统 ID:
Registering to: subscription.rhsm.redhat.com:443/subscription
Username: <你的 Red Hat 账户用户名>
Password: <你的 Red Hat 账户密码>
The system has been registered with ID: ...
步骤三:验证更新
完成重新注册后,再次执行 dnf update。这次,系统终于能够顺利连接到 Red Hat 软件仓库,并开始下载元数据和软件包。
dnf update
Updating Subscription Management repositories.
Red Hat Enterprise Linux 10 for x86_64 - BaseOS (RPMs)
问题完美解决。
发表回复