如何在不打开 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 进行安全实施的技术建议,请查看计划或联系我们的支持团队,为您的项目设计定制的安全架构。.









