为什么在运行 Amazon Linux 1 或 Amazon Linux 2 的 EC2 实例上使用 yum 时会遇到错误?

上次更新日期:2022 年 3 月 24 日

为什么在运行 Amazon Linux 1 或 Amazon Linux 2 的 Amazon Elastic Compute Cloud(Amazon EC2)实例上使用 yum 时会遇到错误?

简短描述

使用 yum 命令的输出消息来确定到底发生了什么错误。常见的错误消息如下:

  • Connection timed out XXX milliseconds(连接超时 XXX 毫秒)
  • HTTP 错误 403 – 禁止
  • Could not resolve host: xxxxxxxxx.$awsregion.$awsdomain(无法解析主机:xxxxxxxxx.$awsregion.$awsdomain)
  • HTTP 错误 407 – 需要验证代理身份
  • 解析在 5000 毫秒后超时

解决方法

连接超时 XXX 毫秒

1.    验证附加到 EC2 实例的安全组是否允许出站 http/https 流量。

2.    验证与 EC2 实例的子网关联的网络 ACL 是否允许通过您的 NACL 的出站 http/https 流量。

下例演示了一个允许出站流量通过端口 80 和 443 的自定义网络 ACL:

Inbound rules
Rule#    Type                    Protocol    Port Range    Source        Allow/Deny
100      Custom TCP Rule         TCP (6)     1024-65535    0.0.0.0/0     ALLOW
101      Custom TCP Rule         TCP (6)     1024-65535    ::/0          ALLOW
*        ALL Traffic             ALL         ALL           ::/0          DENY
*        ALL Traffic             ALL         ALL           0.0.0.0/0     DENY
Outbound rules
Rule #    Type                   Protocol    Port Range    Source       Allow/Deny
100       HTTP (80)              TCP (6)     80            0.0.0.0/0    ALLOW
101       HTTPS (443)            TCP (6)     443           0.0.0.0/0    ALLOW
102       HTTP (80)              TCP (6)     80            ::/0         ALLOW
103       HTTPS (443)            TCP (6)     443           ::/0         ALLOW
*         ALL Traffic            ALL         ALL           ::/0         DENY
*         ALL Traffic            ALL         ALL           0.0.0.0/0    DENY

3.    使用以下任意一种方法验证您的 EC2 实例是否具有访问 Amazon Linux 存储库的权限

proxy=http://proxy-server-IP-address:proxy_port
proxy_username="proxy-user-name"
proxy_password="proxy-password"

有关更多信息,请参阅 fedoraproject.org 网站上的将 yum 与代理服务器配合使用

4.    使用上述任意一种方法配置好实例后,运行以下 telnet 命令以确认实例可以访问存储库。在以下命令中,请将 us-east-1 替换为您的实例所在的区域。

Amazon Linux 1

telnet repo.us-east-1.amazonaws.com 80

Amazon Linux 2

telnet amazonlinux.us-east-1.amazonaws.com 80

注意:默认情况下,并非所有 AMI 都安装有 Telnet。要安装 telnet,请运行以下命令:

sudo yum install telnet

HTTP 错误 403 – 禁止

1.    如果您实例的 VPC 中使用了 S3 VPC 终端节点,则请验证附加的策略是否允许对以下资源进行 s3:GetObject API 调用:

Amazon Linux 1:

"arn:aws:s3:::packages.region.amazonaws.com/*"

"arn:aws:s3:::repo.region.amazonaws.com/*"

Amazon Linux 2:

"arn:aws:s3:::amazonlinux.region.amazonaws.com/*"

"arn:aws:s3:::amazonlinux-2-repos-region/*"

注意:请将前例中的区域替换为您的实例所在的区域。

有关更多信息,请参阅 Amazon S3 的终端节点策略

2.    如果您使用代理来访问 Amazon Linux 存储库,请验证子域 .amazonaws.com 是否位于代理配置中的允许列表中。

无法解析主机:xxxxxxxxx.$awsregion.$awsdomain

1.    运行以下命令以验证目录 /etc/yum/vars 是否定义了自定义 yum 变量。此目录必须包含变量 awsdomainawsregion。在以下示例命令中,请将 us-east-1 替换为您的实例所在的区域。

$ cat /etc/yum/vars/awsregion
us-east-1

$ cat /etc/yum/vars/awsdomain
amazonaws.com

2.    验证实例的 DNS 解析。实例必须解析 Amazon Linux 存储库的域名:

$ dig amazonlinux.us-east-1.amazonaws.com

$ dig repo.us-east-1.amazonaws.com

对位于 169.254.169.253 IPv4 地址和 fd00:ec2::253 IPv6 地址的 Amazon 提供的 DNS 服务器的查询将成功。对位于在 VPC IPv4 网络范围 + 2 的基础上保留的 IP 地址的 Amazon 提供的 DNS 服务器的查询也将成功。IPv6 地址只能在基于 Nitro 系统构建的 EC2 实例上访问。

HTTP 错误 407 – 需要验证代理身份

如果由于 yum 没有代理服务器的相关身份验证凭证,导致您的代理无法完成请求,则会出现这种情况。要将 yum 配置为使用代理,请使用以下参数修改 /etc/yum.conf 文件:

proxy=http://proxy-server-IP-address:proxy_port
proxy_username=proxy-user-name
proxy_password=proxy-password

解析在 5000 毫秒后超时

运行以下命令以验证 /etc/resolv.conf 文件是否具有您的 DNS 服务器的正确 IP:

cat /etc/resolv.conf
nameserver YourDNSIP

您可以通过修改 yum 配置文件中的超时值来修改 5000 毫秒的超时时间。

要使用 dig 检查查询时间,请运行以下命令:

$ dig repo.us-east-1.amazonaws.com | grep time

这篇文章对您有帮助吗?


您是否需要账单或技术支持?