排查 SUSE Linux Enterprise Server VM 的连接和注册问题

适用于:✔️ Linux VM

本文介绍使用 SUSE Linux Enterprise Server (SLES) 映像设置 Azure 虚拟机(VM),但 VM 无法连接到 SUSE 订阅管理工具(SMT)存储库。 本文介绍了一些基本的故障排除步骤,并概述了针对特定方案执行的操作(例如 Zypper 中的故障,这是用于管理包的 SUSE 命令行工具)。 Microsoft Linux 专家根据 SUSE 的支持经验和文档汇编了此信息。

请务必阅读每个命令的输出以获取更多线索。 建议保存结果和消息,以便进一步进行故障排除。

先决条件

注意

如果 SLES VM 位于代理服务器后面,建议查看通过代理访问公有云更新基础结构中所述的技术注意事项。 对于 Azure 上的 SLES VM,必要的操作包括:

  1. 从 SLES VM 连接到更新服务器依赖于主机名解析,公共 DNS 服务器无法解析该解析。 因此,某些 Linux/Unix 代理服务器实现可能需要在代理服务器端手动放置 记录, 以便可以解析名称“smt-azure”。

    下面是一个示例记录:

    52.165.88.13 smt-azure.susecloud.net smt-azure

    可用 IP 地址因 Azure 区域而异。 有关详细信息,请参阅此 smt XML 文件中IP 地址列表。

  2. 实例元数据服务(IMDS)使用的 IP 地址 168.63.129.16 和 169.254.169.254 应绕过代理访问。 无法通过代理服务器访问这些特殊的 IP 地址,SLES VM 需要来自 IMDS 的信息来识别它们正在运行的云环境,并查找适当的 SUSE 更新服务器。

    例如,NO_PROXY应在 SLES VM 上配置 /etc/sysconfig/proxy 中的变量,如下所示:

    NO_PROXY="localhost, 127.0.0.1, 168.63.129.16, 169.254.169.254"

故障排除清单

步骤 1:运行存储库诊断脚本

运行 SUSE 工程师 Rich Paredes 提供的 SUSEcloud 存储库检查脚本。 此 Python 脚本执行以下任务:

  1. 检查是否连接到 SUSE 公有云存储库。

  2. 尝试解决任何现有问题。

  3. /var/log/ 目录中创建日志存档,并将其命名为 sc-repocheck_<YYMMDD_hhmmss.tar.xzq>。 如果连接或注册问题仍然存在,则此日志可能很有用。

若要启动脚本,请运行以下命令,将脚本从其 GitHub 位置传输到 Python 解释器:

python3 <(curl --location --silent https://raw.githubusercontent.com/rfparedes/susecloud-repocheck/main/sc-repocheck.py)

若要成功运行,该命令需要从 VM 进行 Internet 访问。 否则,必须先下载脚本,然后修改命令,使其运行。

步骤 2:检查端口 443 上服务器 IP 地址的连接

VM 必须能够在端口 443 上与 SUSE 存储库服务器 smt-azure.susecloud.net (基于 VM 所在的区域)以及区域服务器打开 TCP 连接。 可以在以下位置找到存储库服务器和区域服务器的 IP 地址列表。

IP 地址类型 包含 IP 地址列表的 URL
所有区域的 SMT 服务器 IP 地址 https://susepubliccloudinfo.suse.com/v1/microsoft/servers/smt.xml
区域服务器 IP 地址 https://susepubliccloudinfo.suse.com/v1/microsoft/servers/regionserver.xml

若要检查区域的存储库服务器和区域服务器连接,请使用 OpenSSL s_client 命令 进行安全套接字层 (SSL) 和传输层安全性 (TLS) 客户端。 将占位符的相应 IP 地址插入到以下语法中:

openssl s_client -connect <IP address>:443

运行此命令后,将显示服务器证书。 该命令还会启动正确的 SSL 连接。

以下示例显示了美国东部 2 区域中 SUSE 存储库服务器(位置代码 eastus2、IP 地址 20.186.112.116)的成功命令输出:

$ echo "" | openssl s_client -connect 20.186.112.116:443
CONNECTED(00000003)
Can't use SSL_get_servername
depth=1 C = DE, ST = Bavaria, L = Nuremberg, O = SUSE, OU = CSM, CN = SUSE, emailAddress = suse-public-cloud@susecloud.net
verify return:1
depth=0 C = DE, ST = Bavaria, L = Nuremberg, O = SUSE, OU = Public Cloud, CN = Update server certificate (smt-azure.susecloud.net), emailAddress = suse-public-cloud@susecloud.net
verify return:1
---
Certificate chain
 0 s:C = DE, ST = Bavaria, L = Nuremberg, O = SUSE, OU = Public Cloud, CN = Update server certificate (smt-azure.susecloud.net), emailAddress = suse-public-cloud@susecloud.net
   i:C = DE, ST = Bavaria, L = Nuremberg, O = SUSE, OU = CSM, CN = SUSE, emailAddress = suse-public-cloud@susecloud.net
---
Server certificate
-----BEGIN CERTIFICATE-----
<64-character lines of printable ASCII characters>
    .
    .
    .
-----END CERTIFICATE-----
subject=C = DE, ST = Bavaria, L = Nuremberg, O = SUSE, OU = Public Cloud, CN = Update server certificate (smt-azure.susecloud.net), emailAddress = suse-public-cloud@susecloud.net

issuer=C = DE, ST = Bavaria, L = Nuremberg, O = SUSE, OU = CSM, CN = SUSE, emailAddress = suse-public-cloud@susecloud.net

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA-PSS
Server Temp Key: X25519, 253 bits
---
SSL handshake has read 2538 bytes and written 373 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 4096 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
DONE

原因 1:未显示服务器证书或 SSL 会话

输出不显示服务器证书或 SSL 会话。 如果命令遍历执行 SSL 数据包检查的网络虚拟设备(NVA),则通常会发生这种情况。 此检查会导致 NVA 将自己的 SSL 证书注入加密会话。 由于 SUSE 使用证书固定,因此另一个注入的 SSL 证书可能会中断固定操作。 如果固定断开,SUSE 存储库将拒绝连接。

操作 1:修复网络虚拟设备配置

确保网络虚拟设备不执行以下操作:

  • 阻止访问 SUSE 存储库 IP 地址。
  • 对与 SUSE 存储库的安全连接执行 SSL 数据包检查。
  • 在服务器上插入 NVA SSL 证书。

原因 2:过时的云基础结构信息

SUSE 于 2020 年 6 月 1 日进行了 公有云基础结构更新 。 此更改可能会导致较旧的 VM 或从旧市场映像中新部署的 VM 出现连接问题。

操作 2:更新 SUSE 公有云基础结构

  1. 在有问题的 VM 上,必须下载并提取 Azure 脱机更新,然后使用 Zypper 手动更新包。 通过将占位符替换为 <SLE-base> VM 上使用的 SLES 版本( SLE12SLE15):

    archiveFileName=late_instance_offline_update_azure_<SLE-base>.tar.gz
    wget --no-check-certificate https://52.188.224.179/$archiveFileName
    sha1sum $archiveFileName
    tar --extract --file=$archiveFileName
    cd x86_64
    zypper --no-refresh --no-remote --non-interactive install *.rpm
    
  2. 重新运行 诊断脚本 以修复存储库问题。

原因 3:无法处理的实体错误

SUSE 现在要求 VM 连接到 SUSE 公有云基础结构时使用经过证明的数据。 否则,在 /var/log/cloudregister 文件中记录以下错误:

2021-06-22 17:27:33,950 错误:无法从服务器“52.157.241.14”获取产品信息,无”

无法处理的实体

{
“type”: “error”,
“error”:“此系统上未激活请求的产品”SUSE Linux Enterprise Server for SAP Applications 15 SP1 x86_64”。
“localized_error”:“此系统上未激活请求的产品”SUSE Linux Enterprise Server for SAP Applications 15 SP1 x86_64”。
}

无法注册模块,退出。

操作 3:更新到最新的 Azure 和Azure 混合权益包

如果安装公有云基础结构更新和Azure 混合权益,VM 将使用经过证明的数据,并避免无法处理的实体错误。 为此,请按照下列步骤进行操作:

  1. 请确保从原因 2 安装 SUSE 公有云基础结构 的 Azure 脱机更新。

  2. 在 VM 上运行以下命令,为 SUSE Linux Enterprise 安装Azure 混合权益。 同样,将 <SLE-base> 占位符替换为 VM SLES 版本(SLE12SLE15):

    ahbFileName=late_instance_offline_ahb_<SLE-base>.tar.gz
    wget --no-check-certificate https://52.188.224.179/$ahbFileName
    sha1sum $ahbFileName
    tar --extract --file=$ahbFileName
    cd late_update
    zypper --no-refresh --no-remote --non-interactive install *.rpm
    
  3. 重新运行 诊断脚本 以修复存储库问题。

原因 4:常规注册问题

VM 具有用于存储库访问的过时凭据,或者在尝试进行更新或安装后收到有关系统未注册的消息。

操作 4:强制注册

若要解决大多数注册问题,请使用 force-new 参数指定 SUSEConnect 清理命令和 registercloudguest 命令的组合:

SUSEConnect --cleanup
registercloudguest --force-new

如果这些命令无法修复注册,请尝试运行以下 SUSEConnect 命令以获取当前注册状态,包括 SLES SAP 产品的名称:

SUSEConnect --url https://smt-azure.susecloud.net --status-text

使用该产品名称,运行此 SUSEConnect 命令以激活产品:

SUSEConnect --url https://smt-azure.susecloud.net --product <SLES-SAP-Product-name>

如果这些命令失败,请清理所有存储库信息,然后尝试注册 VM。 然后,与证书和其他组件相关的任何错误都应消失。 运行以下命令:

SUSEConnect --cleanup
rm /etc/zypp/{credentials,services,repos}.d/*
rm --force --recursive /var/cache/zypp/*
rm /var/lib/cloudregister/*
registercloudguest --force-new

最后,再次运行 SUSEConnect 验证 VM 注册状态:

SUSEConnect --status

在 JSON 命令输出中,查找条目 "status":"Registered"

原因 5:未提供证明的数据(422)

运行 存储库诊断脚本后,脚本尝试修复影响 Zypper 更新的问题时,可能会遇到以下错误:

错误:激活 SLES_SAP 12.5 x86_64 ...错误:注册服务器返回“实例验证失败:未提供证明的数据”(422)

操作 5:修复 Zypper 更新问题

  1. 如果尚未执行此操作,请 更新 SUSE 公有云基础结构,如原因 2 中所述。

  2. 再次运行诊断脚本

  3. 如果“422”错误仍然存在,请修改 /etc/regionserverclnt.cfg 配置文件,使其类似于以下文本:

    [server]
    api = regionInfo
    certLocation = /var/lib/regionService/certs
    regionsrv = 23.100.36.229,40.121.202.140,52.187.53.250,104.45.31.195,191.237.254.253
    
    [instance]
    dataProvider = /usr/bin/azuremetadata --api latest --subscriptionId --billingTag --attestedData --signature --xml
    instanceArgs = msftazure
    httpsOnly = true
    

后续步骤

如果需要进一步的帮助,请参阅 Azure VM 的支持和故障排除。 如果有必要,本文还可以帮助你提交Azure 支持事件。 按照说明操作时,请保留 sc-repocheck_><YYMMDD_hhmmss.tar.xzq 日志存档的副本,因为它可能请求由支持工程师进行检查。

详细信息

有关 Azure 中认可的 Linux 分发和开源技术的详细信息,请参阅 Azure 中对 Linux 的支持和开放源代码技术。

第三方信息免责声明

本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。

联系我们寻求帮助

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