适用于:✔️ Linux VM
本文介绍使用 SUSE Linux Enterprise Server (SLES) 映像设置 Azure 虚拟机(VM),但 VM 无法连接到 SUSE 订阅管理工具(SMT)存储库。 本文介绍了一些基本的故障排除步骤,并概述了针对特定方案执行的操作(例如 Zypper 中的故障,这是用于管理包的 SUSE 命令行工具)。 Microsoft Linux 专家根据 SUSE 的支持经验和文档汇编了此信息。
请务必阅读每个命令的输出以获取更多线索。 建议保存结果和消息,以便进一步进行故障排除。
先决条件
- 从 VM 进行 Internet 访问。
- Python 语言解释器。
- 客户端 URL (curl) 工具。
- Zypper 包管理器。
- OpenSSL 工具包。
- SUSEConnect 工具。
- registercloudguest 工具。
注意
如果 SLES VM 位于代理服务器后面,建议查看通过代理访问公有云更新基础结构中所述的技术注意事项。 对于 Azure 上的 SLES VM,必要的操作包括:
从 SLES VM 连接到更新服务器依赖于主机名解析,公共 DNS 服务器无法解析该解析。 因此,某些 Linux/Unix 代理服务器实现可能需要在代理服务器端手动放置 记录, 以便可以解析名称“smt-azure”。
下面是一个示例记录:
52.165.88.13 smt-azure.susecloud.net smt-azure
可用 IP 地址因 Azure 区域而异。 有关详细信息,请参阅此 smt XML 文件中的 IP 地址列表。
实例元数据服务(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 脚本执行以下任务:
检查是否连接到 SUSE 公有云存储库。
尝试解决任何现有问题。
在 /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 公有云基础结构
在有问题的 VM 上,必须下载并提取 Azure 脱机更新,然后使用 Zypper 手动更新包。 通过将占位符替换为
<SLE-base>
VM 上使用的 SLES 版本(SLE12
或SLE15
):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
重新运行 诊断脚本 以修复存储库问题。
原因 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 将使用经过证明的数据,并避免无法处理的实体错误。 为此,请按照下列步骤进行操作:
请确保从原因 2 安装 SUSE 公有云基础结构 的 Azure 脱机更新。
在 VM 上运行以下命令,为 SUSE Linux Enterprise 安装Azure 混合权益。 同样,将
<SLE-base>
占位符替换为 VM SLES 版本(SLE12
或SLE15
):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
重新运行 诊断脚本 以修复存储库问题。
原因 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 更新问题
如果尚未执行此操作,请 更新 SUSE 公有云基础结构,如原因 2 中所述。
如果“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 反馈社区。