上次更新日期:2020 年 10 月 17 日
为什么在运行 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 存储库的权限
您的实例位于某个具有互联网网关的公有子网中。有关更多信息,请参阅启用互联网访问。 您的实例位于某个具有 NAT 网关的私有子网中。有关更多信息,请参阅 NAT 网关。 您的实例位于某个具有 NAT 实例的私有子网中。有关更多信息,请参阅 NAT 实例。 您的实例位于某个具有 S3 VPC 终端节点的公有子网或私有子网中。有关更多信息,请参阅 如何在无法访问互联网的情况下在运行 Amazon Linux 1 或 Amazon Linux 2 的 EC2 实例上更新 yum 或安装软件包? 您的实例位于某个具有代理的私有子网中。要将 yum 配置为使用代理,请使用以下参数修改 /etc/yum.conf 文件:proxy=http://proxy-server-IP-address:proxy_port
proxy_username=proxy-user-name
proxy_password=proxy-password
注意:请将 proxy-port、proxy-user-name, 和 proxy-password 替换为您的代理的相应值。
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
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/*"
注意:请将前例中的 Region 替换为您的实例所在的区域。
2.如果您使用代理来访问 Amazon Linux 存储库,请验证子域 .amazonaws.com 是否位于代理配置中的允许列表中。
无法解析主机:xxxxxxxxx.$awsregion.$awsdomain1.运行以下命令以验证目录 /etc/yum/vars 是否定义了自定义 yum 变量。此目录必须包含变量 awsdomain 和 awsregion。在以下示例命令中,请将 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
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