为什么在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 实例上使用 yum 时收到错误?
我在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 Amazon Elastic Compute Cloud(Amazon EC2)实例上使用 yum 时收到错误。
简短描述
使用 yum 命令的输出消息来确定发生了什么错误。以下是常见的错误消息:
- Connection timed out XXX milliseconds
- HTTP Error 403 - Forbidden
- Could not resolve host: xxxxxxxxx.$awsregion.$awsdomain
- HTTP Error 407 - Proxy Authentication Required
- Resolving timed out after 5000 milliseconds
解决方法
Connection timed out XXXX milliseconds
1.验证附加到您的 EC2 实例的安全组是否允许出站 HTTP 或 HTTPS 流量。
2.验证与您的 EC2 实例子网关联的网络 ACL 是否允许出站 HTTP 或 HTTPS 流量流经您的 NACL。
以下示例显示了允许端口 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 存储库:
- 您的实例位于具有互联网网关的公有子网中。有关详细信息,请参阅启用互联网访问。
- 您的实例位于具有 NAT 网关的私有子网中。有关详细信息,请参阅 NAT 网关。
- 您的实例位于具有 NAT 实例的私有子网中。有关详细信息,请参阅 NAT 实例。
- 您的实例位于具有 Amazon Simple Storage Service(Amazon S3)VPC 端点的公有或私有子网中。有关详细信息,请参阅如何在没有接入互联网的情况下在运行 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 实例上更新 yum 或安装软件包?
- 您的实例位于具有代理的私有子网中。要将 yum 配置为使用代理,请使用以下参数修改 /etc/yum.conf 文件。在以下示例中,将 proxy-port、proxy-user-name 和 proxy-password 替换为您的代理的正确值。
proxy=http://proxy-server-IP-address:proxy_port proxy_username="proxy-user-name" proxy_password="proxy-password"
有关详细信息,请参阅 fedoraproject.org 网站上的将 yum 与代理服务器结合使用。
4.使用上述选项之一配置您的实例后,运行以下 curl 命令以确认该实例可以访问存储库。在以下命令中,将 us-east-1 替换为您的实例的 AWS 区域。
Amazon Linux 2023
curl -I al2023-repos-us-east-1-de612dc2.s3.dualstack.us-east-1.amazonaws.com
Amazon Linux 1
curl -I repo.us-east-1.amazonaws.com
Amazon Linux 2
curl -I amazonlinux.us-east-1.amazonaws.com
curl 命令已预先安装在所有亚马逊云机器镜像(AMI)上,但是如果没有凭证,则无法访问 Amazon Linux 存储库。curl 命令无法获取 yum 存储库的凭证。因此,您会收到一条类似于以下内容的访问被拒绝错误消息。curl 命令用于测试超时问题是否仍在发生。错误消息显示可以访问网络并且不再发生超时问题:
$ curl -I amazonlinux.us-east-1.amazonaws.com HTTP/1.1 403 Forbidden x-amz-bucket-region: us-east-1 x-amz-request-id: xxxxxxxx x-amz-id-2: xxxxxxxxxxxxx= Content-Type: application/xml Date: Thu, 17 Nov 2022 16:59:59 GMT Server: AmazonS3
要安装 telnet 等软件,请运行以下命令:
sudo yum install telnet
HTTP Error 403 - Forbidden
1.对于您的实例 VPC 中的 Amazon S3 VPC 端点,请验证附加的策略是否允许对以下资源进行 s3:GetObject API 调用。在以下示例中,请将 region 替换为您的实例的 AWS 区域。
Amazon Linux 2023:
“arn:aws:s3:::al2023-repos-us-east-1-de612dc2/*”
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 子域是否在代理配置的白名单上。
Could not resolve host: xxxxxxxx.$awsregion.$awsdomain
1.运行以下命令以验证 /etc/yum/vars 目录是否定义了自定义 yum 变量。该目录必须包含变量 awsdomain 和 awsregion。在以下示例命令中,请将 us-east-1 替换为您的实例的 AWS 区域。
$ 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 $ dig al2023-repos-us-east-1-de612dc2
通过 169.254.169.253 IPv4 地址和 fd00:ec2:: 253 IPv6 地址向 Amazon 提供的 DNS 服务器发出的查询成功。通过 VPC IPv4 网络范围基址 + 2 的预留 IP 地址向 Amazon 提供的 DNS 服务器发出的查询也成功。IPv6 地址只能在基于 Nitro 的 EC2 实例上访问。
HTTP Error 407 - Proxy Authentication Required
如果你的代理由于 yum 或 dnf 没有代理服务器的正确身份验证凭证而无法完成请求,则会发生 HTTP Error 407 错误。要将 yum 或 dnf 配置为使用代理,请使用以下参数修改 /etc/yum.conf 文件:
Amazon Linux 1 和 Amazon Linux 2:/etc/yum.conf
Amazon Linux 2023:/etc/dnf/dnf.conf
proxy=http://proxy-server-IP-address:proxy_port proxy_username=proxy-user-name proxy_password=proxy-password
Resolving timed out after 5000 milliseconds
运行以下命令以验证 /etc/resolv.conf 文件是否具有适用于您的 DNS 服务器的正确 IP:
cat /etc/resolv.conf nameserver YourDNSIP
您可以通过修改 yum 配置文件中的 timeout 值来修改 5000 毫秒超时时间。有关详细信息,请参阅 linux.die.net 网站上的 yum.conf。
要使用 dig 查看查询时间,请运行以下命令:
$ dig repo.us-east-1.amazonaws.com | grep time
对于 Amazon Linux 2023,请通过更改 /etc/yum.repos.d/amazonlinux.re 中的 metadata_expire 值来修改超时时间。
相关内容
- AWS 官方已更新 6 个月前
- AWS 官方已更新 6 个月前