为什么我无法在 Amazon EC2 Linux 实例上安装 SSM 代理?

上次更新时间:2021 年 6 月 7 日

当我尝试在 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例上安装 SSM 代理时,安装失败。如何解决此问题?

简短描述

Amazon Machine Images (AMI) 提供的大多数 Amazon Web Services (AWS) 上已预先安装了 SSM 代理,包括以下各项:

  • Amazon Linux
  • Amazon Linux 2
  • Amazon Linux 2 ECS 优化的 Base AMI
  • Ubuntu Server 16.04、18.04 和 20.04

但是,要管理基于 RedHat、SUSE 或 CentOS AMI 的实例,您必须手动安装 SSM 代理。

解决方法

验证以下内容以排查 SSM 代理安装失败的问题:

不支持的操作系统版本

SSM 代理并非适用于所有操作系统 (OS) 版本。如果运行不支持的操作系统版本,SSM 代理安装将失败。验证支持的操作系统列表,以确认 SSM 代理是否可用于您的操作系统版本。

程序包下载失败

在手动安装 SSM 代理的过程中,SSM 代理程序包将从 Amazon Simple Storage Service (Amazon S3) 存储库下载和安装。如果实例无法连接到 S3 存储桶以下载程序包,SSM 代理安装将失败。

验证您的 Amazon EC2 实例是否有权访问 S3 存储库以下载 SSM 代理程序包:

  • 如果您的实例位于某个包含网络地址转换 (NAT) 网关的私有子网中,请参阅 NAT 网关
  • 如果您的实例位于某个包含 NAT 实例的私有子网中,请参阅 NAT 实例
  • 如果您的实例位于某个包含互联网网关的公有子网中,请参阅启用互联网访问
  • 如果您的实例位于某个使用 Amazon S3 Virtual Private Cloud (VPC) 终端节点的私有或公有子网中,请参阅 Amazon S3 的终端节点

在下列情况下,程序包下载也可能会失败:

  • 操作系统内配置的域名系统 (DNS) 服务器无法解析 Amazon S3 终端节点 URL。
  • VPC 的 DNS 解析已停用。

运行以下命令以验证 /etc/resolv.conf 文件包括您的 DNS 服务器的正确 IP 地址。然后,查看输出并确认名称服务器 IP 与 DNS 服务器的 IP 地址匹配。

$ cat /etc/resolv.conf

缺少 SSM 代理程序包的公共密钥

SSM 代理程序包文件以加密方式签名。要验证代理程序包是否为原始版本,您可以使用公共密钥,通过 RPM 或 GPG 验证安装程序包签名。RPM 程序包已经包括 RPM 验证所需的签名。但是,如果您使用 GPG 来验证安装程序包,则必须手动导入公共密钥。否则,安装将失败,并显示错误“Public key for amazon-ssm-agent.rpm is not installed”(未安装 amazon-ssm-agent.rpm 的公共密钥)。

有关详细信息,请参阅验证 SSM 代理的签名