使用 AWS Systems Manager 远程在 EC2 实例上执行命令
了解如何安全高效地使用 AWS Systems Manager 在 EC2 服务器上执行命令。.

使用 AWS Systems Manager 远程在 EC2 实例上执行命令

本文将指导您如何使用 AWS Systems Manager 在 EC2 实例上安全地运行命令,而无需打开 SSH 端口。通过了解先决条件、最佳实践和 IAM 设置,您将能够轻松地管理和运行服务器上的命令。.
0 股票
0
0
0
0

 

如何在不打开 SSH 的情况下在 EC2 上运行命令?

使用 AWS Systems Manager 远程在 EC2 实例上运行命令的方法 安全的可扩展 而且无需打开 SSH 端口即可在 EC2 实例上运行命令。本指南为网站管理员、DevOps 工程师和网络工程师提供分步实施说明、先决条件、AWS CLI 命令示例、IAM 配置和实用安全技巧。.

 

前提条件和总体架构

要在 EC2 上远程执行命令,需要三个主要组件:

  • SSM代理已安装并运行在EC2上。.
  • EC2 具有 IAM 实例配置文件,其中包含注册和与 Systems Manager 通信所需的最低策略(AmazonSSMManagedInstanceCore).
  • 网络连接 SSM 服务(通过互联网或 VPC 端点连接 SSM/EC2Messages/SSM-SessionManager)。.

建筑学: 用户或脚本可通过 AWS 控制台或 AWS CLI/SDK 命令获取。 运行命令 或者 开始会话 调用 → 系统管理器向 EC2 上的 SSM 代理发送消息 → 代理执行命令并将输出返回到 CloudWatch/S3 或调用结果。.

 

关于网络访问的说明

如果 EC2 位于没有 NAT 的私有子网中,请使用 VPC端点 为了 com.amazonaws。 .ssm, ec2messages, 短信消息s3 使用。.

 

设置必要的身份和访问管理 (IAM) 角色和策略

为 EC2 创建 IAM 角色并附加 AWS 托管策略:

信任策略(EC2 的信任实体):

{
  "Version":"2012-10-17",
  "Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]
}

附加托管策略: AmazonSSMManagedInstanceCore

aws iam create-role --role-name SSMInstanceRole --assume-role-policy-document file://trust-policy.json
aws iam attach-role-policy --role-name SSMInstanceRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

此策略包含向 SSM 注册和发送日志所需的权限。要将输出存储在 S3 中或使用 KMS 进行加密,您还必须添加写入该 S3 存储桶和使用 KMS 密钥的权限。.

然后将此角色转换为实例配置文件并将其连接到 EC2。.

 

在常见 Linux 发行版上安装和检查 SSM Agent

适用于 Amazon Linux 2:

sudo yum install -y amazon-ssm-agent
sudo systemctl enable --now amazon-ssm-agent

对于 Ubuntu 系统(以 Debian 软件包下载为例):

REGION=us-east-1
wget https://s3.${REGION}.amazonaws.com/amazon-ssm-${REGION}/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl enable --now amazon-ssm-agent

查看状态:

sudo systemctl status amazon-ssm-agent
sudo tail -n 200 /var/log/amazon/ssm/amazon-ssm-agent.log

 

使用 Run Command 执行命令(AWS CLI 示例)

快速在一个或多个 EC2 实例上运行 shell 命令:

示例:在实例上运行 apt update 和 upgrade 操作:

aws ssm send-command \
  --instance-ids "i-0123456789abcdef0" \
  --document-name "AWS-RunShellScript" \
  --parameters commands=["sudo apt-get update -y","sudo apt-get upgrade -y"] \
  --comment "Update packages" \
  --region us-east-1

按标签定位(例如,所有带有 Role=web 标签的 Web 服务器):

aws ssm send-command \
  --targets Key=tag:Role,Values=web \
  --document-name "AWS-RunShellScript" \
  --parameters commands=["/opt/deploy/deploy.sh"] \
  --region eu-central-1

获取命令的输出结果:

1) 通过 send-command 的输出,您可以获得一个 CommandId。.

2)

aws ssm get-command-invocation --command-id <COMMAND_ID> --instance-id i-0123456789abcdef0

如果输出发送到 S3,请将发送命令参数设置为 --输出 S3 存储桶名称--output-s3-key-prefix 指定。.

 

运行大型脚本的实用技巧

  • 将脚本上传到 S3,然后在运行命令中只需…… wget + 跑。.
  • 对于来自以下位置的重复脚本 州经理 使用。.
  • 使用 SSM 管理的参数和文档(自动化文档)实现完全自动化。.

 

使用会话管理器进行交互式访问和端口转发

会话管理器允许在没有 SSH 的情况下进行交互式 shell 连接,还可以执行端口转发。.

开始互动环节:

aws ssm start-session --target i-0123456789abcdef0

需要安装才能在控制台或通过 AWS CLI 进行交互式使用。 会话管理器插件 客户端上有。.

数据库访问端口转发示例:

aws ssm start-session \
  --target i-0123456789abcdef0 \
  --document-name AWS-StartPortForwardingSession \
  --parameters '{"portNumber":["3306"],"localPortNumber":["3307"]}'

然后你可以去 localhost:3307 连接和流量通过 SSM 隧道传输,无需向互联网开放端口 3306。.

 

管理输出和日志(CloudWatch / S3)

在会话管理器首选项中,启用 CloudWatch 日志或 S3 日志记录以保存所有会话。.

对于运行命令,您可以将输出重定向到 S3 或启用 CloudWatch 输出:

--cloud-watch-output-config '{"CloudWatchOutputEnabled":true}'

 

实际场景和示例

对跨多个区域的数十个 EC2 实例执行批量更新:

  • 使用标签或资源组进行目标定位。.
  • 使用 SSM 维护窗口或补丁管理器进行计划和协调。.

用于GPU和渲染服务器:

对于部署在多个位置(例如,遍布我们 85 多个地点或 AWS 区域)的 GPU 服务器,请使用运行命令安装 NVIDIA 驱动程序、CUDA 和依赖软件包。示例:

aws ssm send-command --instance-ids "i-..." --document-name "AWS-RunShellScript" --parameters commands=["sudo apt-get install -y nvidia-driver-470","sudo reboot"]

快速搭建延迟极低的交易型VPS:

  • 不要打开 SSH/22,而是使用会话管理器和端口转发来安全地访问交易服务器。.
  • 选择合适的位置(距离代理服务器最近的数据中心,且有直达路径)并使用 CDN/BGP/专用网络可以降低延迟;我们有超过 85+ 个地点 我们为世界各地的这些需求提供服务。.

 

安全提示和最佳实践

绝对不要公开开放SSH端口。SSM 是一种低风险的替代方案。.

  • 最小特权 使用 IAM 角色和用户。仅允许执行特定文档或访问特定参数。.
  • 启用会话管理器日志记录并将输出通过 KMS 加密发送到 S3 或 CloudWatch。.
  • 对于类型的参数存储 安全字符串 并使用专用的KMS密钥。.
  • 会话管理器限制:您可以设置计划和 IAM 策略,使其仅在特定时间段内运行或启用 MFA。.
  • 对于敏感环境,可利用 VPC 端点进行 SSM 和强大的网络 ACL 及安全组。.

 

常见错误及故障排除

  • 实例未管理/未注册: 请确认 SSM 代理已安装并正在运行,并且已附加正确的 IAM 角色。.
  • 连接超时: 检查网络路由、VPC 端点或互联网访问/NAT。.
  • 向 S3 发送输出时权限不足: IAM角色必须具有对该存储桶的写入权限。.
  • start-session 命令报错: 确保客户端上已安装 session-manager-plugin,并且控制台中已启用会话管理器。.

 

摘要及使用方法

使用 AWS Systems Manager 在 EC2 实例上远程运行命令是一种安全便捷的方式,可以远程管理 EC2、运行脚本、打补丁和访问,而无需使用 SSH。.

该方案非常符合以下需求:

  • 用于人工智能和渲染的图形服务器(GPU),
  • 用于交易且对延迟要求低的VPS,
  • 具备高服务水平协议(SLA)的游戏服务器和基础设施

两者可以组合使用。如果您需要管理 AWS EC2 和我们的国际服务器(覆盖 85 多个地点),我们提供以下服务:

  • 对于对延迟敏感的工作负载,请选择离您最近的地点。.
  • 使用 BGP/CDN 和专用链路(如果需要)。.
  • 使用 SSM + 自动化文档来管理和自动化我们的本地/AWS/VPS 环境,并将日志集中保存在 CloudWatch/S3 中。.

 

入门建议步骤

要查看我们的云服务器、GPU 云和 VPS 交易计划,或获取有关选择最佳位置和使用 AWS Systems Manager 进行安全实施的技术建议,请查看计划或联系我们的支持团队,为您的项目设计定制的安全架构。.

 

常见问题解答

您可能也喜欢