如何通过AWS SSM批量推送终端命令?
在AWS SSM中批量推送执行脚本的实现方法
核心思路:用SSM自定义命令文档打包脚本
AWS Systems Manager(SSM)的自定义命令文档可以把你的脚本逻辑封装成可复用、按需推送的独立单元,支持批量下发到目标实例,还能安全处理敏感信息。
步骤1:编写SSM命令文档(JSON格式)
把你的脚本逻辑嵌入到SSM文档中,同时将敏感信息(如密码)抽离到SSM参数存储,避免硬编码:
{ "schemaVersion": "2.2", "description": "批量配置hosts并加入AD域", "parameters": { "DomainUsername": { "type": "String", "description": "域账号用户名" }, "DomainPasswordParam": { "type": "String", "description": "存储密码的SSM参数名称(SecureString类型)" }, "ServerIP": { "type": "String", "description": "域服务器IP", "default": "192.168.1.1" }, "DomainName": { "type": "String", "description": "域名", "default": "domain.com" }, "ServerHostname": { "type": "String", "description": "域服务器主机名", "default": "MyServer.domain.com" } }, "mainSteps": [ { "action": "aws:runShellScript", "name": "ConfigureHostsAndJoinDomain", "inputs": { "runCommand": [ "echo '{{ ServerIP }} {{ ServerHostname }}' >> /etc/hosts", "apt update && apt install -y realmd", "PASSWORD=$(aws ssm get-parameter --name '{{ DomainPasswordParam }}' --with-decryption --query 'Parameter.Value' --output text)", "echo \"$PASSWORD\" | realm join -v --user='{{ DomainUsername }}' {{ DomainName }}", "reboot" ] } } ] }
步骤2:存储敏感密码(可选但强烈推荐)
- 打开AWS控制台的SSM参数存储页面
- 创建一个
SecureString类型的参数,存入你的域密码,例如命名为/domain/join-password
步骤3:上传自定义SSM文档
- 进入SSM控制台的文档页面
- 点击「创建文档」,选择「命令」类型
- 粘贴上述JSON内容,填写文档名称(如
DomainJoinScript),保存即可
步骤4:批量执行文档
- 进入SSM的Run Command页面
- 点击「运行命令」,选择你刚创建的自定义文档
DomainJoinScript - 在「参数」栏填写:
DomainUsername:你的域账号用户名DomainPasswordParam:步骤2中创建的密码参数名称- 其他参数可使用默认值或按需修改
- 在「目标」栏选择要执行的实例(支持按标签、实例ID批量选择)
- 配置超时时间、通知等选项后,点击「运行」
注意事项
- 确保目标实例的SSM Agent有权限访问SSM参数存储:给实例的IAM角色添加
ssm:GetParameter权限 - 若
realm join失败,可尝试额外安装依赖:apt install -y krb5-user - 执行
reboot会重启实例,需确认业务允许重启操作
内容的提问来源于stack exchange,提问作者Bisclavret
相关产品推荐
相关产品推荐

