You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用AWS Java SDK 1.11.x通过SSM在Windows EC2实例执行quser命令?

使用AWS Java SDK 1.11.x通过SSM在Windows EC2实例上执行quser命令

我之前刚好做过类似的操作,用AWS Java SDK 1.11.x实现这个需求和你找到的AWS CLI逻辑是对应的,核心就是构造SendCommandRequest对象,指定目标实例、要执行的SSM文档以及PowerShell命令参数。下面是完整的实现步骤和代码示例:

1. 确保引入正确的SDK依赖

首先,在你的项目中添加AWS SSM SDK的依赖,如果用Maven的话,pom.xml里加上:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-ssm</artifactId>
    <version>1.11.1000</version> <!-- 可以替换为你需要的1.11.x版本 -->
</dependency>

2. 完整代码实现

下面的代码会初始化SSM客户端,发送执行quser命令的请求,并返回命令ID(你可以用这个ID后续查询命令的执行结果):

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simplesystemsmanagement.AmazonSSM;
import com.amazonaws.services.simplesystemsmanagement.AmazonSSMClientBuilder;
import com.amazonaws.services.simplesystemsmanagement.model.SendCommandRequest;
import com.amazonaws.services.simplesystemsmanagement.model.SendCommandResult;
import java.util.Collections;

public class SsmQuserExecutor {
    public static void main(String[] args) {
        // 1. 初始化SSM客户端,这里使用默认凭证链(环境变量、IAM角色等)和指定区域
        AmazonSSM ssmClient = AmazonSSMClientBuilder.standard()
                .withCredentials(DefaultAWSCredentialsProviderChain.getInstance())
                .withRegion(Regions.US_EAST_1) // 替换为你的实例所在区域
                .build();

        // 2. 构造SendCommandRequest
        SendCommandRequest sendCommandRequest = new SendCommandRequest()
                // 指定目标EC2实例ID,可以添加多个ID实现批量执行
                .withInstanceIds("your-instance-id-1", "your-instance-id-2")
                // 指定要使用的SSM文档,对应CLI的--document-name
                .withDocumentName("AWS-RunPowerShellScript")
                .withComment("Get logged-in users via quser command")
                // 设置命令参数,对应CLI的--parameters commands=quser
                .withParameters(Collections.singletonMap("commands", Collections.singletonList("quser")));

        // 3. 发送命令并处理响应
        try {
            SendCommandResult result = ssmClient.sendCommand(sendCommandRequest);
            String commandId = result.getCommand().getCommandId();
            System.out.println("Command sent successfully. Command ID: " + commandId);
            // 如果你需要获取命令的执行输出,可以后续用GetCommandInvocationRequest查询
        } catch (Exception e) {
            System.err.println("Failed to send command: " + e.getMessage());
            e.printStackTrace();
        } finally {
            ssmClient.shutdown();
        }
    }
}

关键细节说明

  • 凭证和区域:代码中使用DefaultAWSCredentialsProviderChain会自动从环境变量、系统属性、IAM角色(如果是在EC2实例或EKS中运行)等位置获取凭证,你也可以根据需求指定自定义的凭证提供者。区域要替换为你的EC2实例所在的AWS区域。
  • 批量执行:如果要在多个实例上执行,只需要在withInstanceIds中添加多个实例ID即可,不需要逐个调用接口。
  • 查询执行结果:如果需要获取quser命令的输出内容,可以使用GetCommandInvocationRequest,传入之前得到的commandId和实例ID,调用ssmClient.getCommandInvocation()获取结果。

内容的提问来源于stack exchange,提问作者Alexandre Krabbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:56