赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 操作指南
  5. 运维与监控
  6. 云助手
  7. 进阶用法
  8. 在云助手命令中使用OOS参数仓库

在云助手命令中使用OOS参数仓库

  • 进阶用法
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

在云助手命令中使用自定义参数,可以更加灵活地编写脚本,提高命令的复用性。同时,系统运维管理OOS提供参数仓库功能,支持普通参数和加密参数。您可以在云助手命令中结合OOS的参数仓库功能,更为方便和安全地管理自定义参数。

前提条件

  • 目标ECS实例必须满足以下条件:

    • 实例处于运行中(Running)状态。

    • 实例已安装云助手Agent。具体操作,请参见安装云助手Agent。

  • 已开通系统运维管理(OOS)。更多信息,请参见什么是系统管理与运维服务。

  • 如果需要使用加密参数,需要开通密钥管理服务(KMS)。更多信息,请参见什么是密钥管理服务。

背景信息

在云助手命令中,您可以直接使用{{parameterName}}方式表示自定义参数。例如云助手命令adduser {{username}},表示为Linux实例添加用户名。此时,username表示一个自定义参数,您可以在RunCommand或InvokeCommand的Parameters参数中传入具体的取值。

通过引用系统运维管理参数仓库中的参数,您可以以更灵活的方式使用参数。参数仓库定义的参数分为普通参数和加密参数,云助手分别以{{oos:}}和{{oos-secret:}}的方式定义普通参数和加密参数。

  • 如果您的参数不涉及敏感数据,建议使用普通参数。更多信息,请参见在云助手命令中使用普通参数。

  • 如果您的参数涉及敏感数据(例如密码等),建议使用加密参数。更多信息,请参见在云助手命令中使用加密参数。

在云助手命令中使用普通参数

如果您使用RAM用户执行云助手命令,需要为RAM用户配置策略。具体操作,请参见创建自定义权限策略和为RAM用户授权。允许RAM用户使用普通参数执行云助手命令,需要使用云助手和参数仓库相关的API权限。具体RAM权限策略如下:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:DescribeInstances",
                "ecs:DescribeTagKeys",
                "ecs:DescribeTags",
                "ecs:CreateCommand",
                "ecs:DescribeCommands",
                "ecs:InvokeCommand",
                "ecs:RunCommand",
                "ecs:DeleteCommand",
                "ecs:DescribeInvocations",
                "ecs:DescribeInvocationResults",
                "ecs:StopInvocation",
                "ecs:DescribeCloudAssistantStatus",
                "ecs:InstallCloudAssistant",
                "oos:GetParameters",
                "oos:GetParameter"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

如果您的命令不涉及敏感数据,可以使用普通参数。本节以在Linux实例中增加新用户为例,介绍如何在云助手命令中使用OOS参数仓库的普通参数。

  1. 通过系统运维管理OOS的参数仓库创建普通参数。具体操作,请参见普通参数。

    以下示例表示在普通参数中新增一个username参数,取值为user01,您可以根据实际情况修改。

    名称

    示例值

    参数名称

    username

    参数类型

    String

    值

    user01

  2. 通过Java SDK调用RunCommand,执行云助手命令。

    以下示例表示通过云助手命令为Linux实例创建一个新用户,命令内容为adduser {{oos:username}}。其中,{{oos:username}}表示新用户名由OOS参数仓库的普通参数username定义。

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.ecs.model.v20140526.RunCommandRequest;
    import com.aliyuncs.ecs.model.v20140526.RunCommandResponse;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class AddUserName {
        public static void main(String[] args) {
            // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
            // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            IAcsClient client = new DefaultAcsClient(profile);
    
            RunCommandRequest request = new RunCommandRequest();
            // 设置实例所在的地域。
            request.setRegionId("cn-hangzhou");
            // 设置云助手命令的语言类型,示例表示使用shell语言。
            request.setType("RunShellScript");
            // 设置云助手命令内容,示例表示为Linux新增一个用户,用户名由OOS参数仓库的普通参数username决定。
            request.setCommandContent("adduser {{oos:username}}");
    
            List<String> instanceIdList = new ArrayList<String>();
            // 设置运行云助手命令的实例ID。
            instanceIdList.add("i-bp1dktddjsg7oh11****");
            request.setInstanceIds(instanceIdList);
            // 设置云助手命令支持自定义参数。
            request.setEnableParameter(true);
    
            try {
                RunCommandResponse response = client.getAcsResponse(request);
                System.out.println(new Gson().toJson(response));
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                System.out.println("ErrCode:" + e.getErrCode());
                System.out.println("ErrMsg:" + e.getErrMsg());
                System.out.println("RequestId:" + e.getRequestId());
            }
        }
    }

    执行结果如下所示:

    {
        "requestId": "67D1BD1A-0D08-42C3-AFD9-A3397CD67CD1",
        "commandId": "c-hz01hkgs19i****",
        "invokeId": "t-hz01hkgs19s****"
    }
  3. 检查云助手命令执行结果。

    您可以登录ECS实例检查云助手命令是否生效。以下示例表示在Linux实例中检查是否新增用户user01。

    1. 登录ECS实例。

      具体操作,请参见通过密码或密钥认证登录Linux实例。

    2. 运行以下命令查看是否已经新增user01用户。

      cat /etc/passwd |grep user01

      以下结果表示已经成功新增user01用户。新增user01

在云助手命令中使用加密参数

如果您使用RAM用户执行云助手命令,需要为RAM用户配置策略。具体操作,请参见创建自定义权限策略和为RAM用户授权。允许RAM用户使用加密参数执行云助手命令,需要使用云助手、参数仓库及KMS相关的API权限。具体RAM权限策略如下:

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecs:DescribeInstances",
                "ecs:DescribeTagKeys",
                "ecs:DescribeTags",
                "ecs:CreateCommand",
                "ecs:DescribeCommands",
                "ecs:InvokeCommand",
                "ecs:RunCommand",
                "ecs:DeleteCommand",
                "ecs:DescribeInvocations",
                "ecs:DescribeInvocationResults",
                "ecs:StopInvocation",
                "ecs:DescribeCloudAssistantStatus",
                "ecs:InstallCloudAssistant",
                "oos:GetParameters",
                "oos:GetSecretParameters",
                "oos:GetParameter",
                "oos:GetSecretParameter",
                "kms:GetSecretValue"
            ],
            "Resource": "*"
        }
    ],
    "Version": "1"
}

如果您的命令涉及敏感数据(例如服务器密码、数据库密码等),建议使用加密参数,以提高命令的安全性。本节以在Linux实例中修改用户密码为例,介绍如何在云助手命令中使用OOS参数仓库的加密参数。

说明

执行以下操作前,实例中需要已经创建目标用户。关于如何为Linux实例添加新用户,请参见在云助手命令中使用普通参数。

  1. 通过系统运维管理OOS的参数仓库创建加密参数和普通参数。具体操作,请参见加密参数和普通参数。

    以下示例表示在OOS参数仓库中创建用户名参数username和密码参数password。

    • 在普通参数中新增一个用户名参数username,取值为user01,您可以根据实际情况修改。

      名称

      示例值

      参数名称

      username

      参数类型

      String

      值

      user01

    • 在加密参数中新增一个密码参数password,取值为MyPassword01,您可以根据实际情况修改。

      名称

      示例值

      参数名称

      password

      KMS密钥ID

      Default Service CMK

      值

      MyPassword01

      说明

      此密码仅做示例,请不要在线上环境使用。

  2. 为目标实例设置RAM角色。

    1. 创建RAM角色。具体操作,请参见创建可信实体为阿里云服务的RAM角色。

      相关配置示例如下所示。

      名称

      示例

      当前可信实体类型

      选择阿里云服务。

      角色类型

      选择普通服务角色。

      角色名称

      AxtParametersRamRole

      选择受信服务

      在下拉栏中选择云服务器。

    2. 创建RAM角色相关权限策略。具体操作,请参见创建自定义权限策略。

      策略名称为AxtParametersRamPolicy,策略内容如下所示,表示允许调用KMS和OOS的相关API(GetSecretValue、GetParameters、GetSecretParameters、GetParameter和GetSecretParameter)。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "kms:GetSecretValue"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "oos:GetParameters",
                      "oos:GetSecretParameters",
                      "oos:GetParameter",
                      "oos:GetSecretParameter"
                  ],
                  "Effect": "Allow",
                  "Resource": "*"
              }
          ]
      }
    3. 为RAM角色(AxtParametersRamRole)设置策略权限(AxtParametersRamPolicy)。具体操作,请参见为RAM角色授权。

    4. 为目标ECS实例设置RAM角色(AxtParametersRamRole)。具体操作,请参见授予实例RAM角色。

  3. 通过Java SDK调用RunCommand,执行云助手命令。

    以下示例表示通过云助手命令为Linux实例修改用户密码,命令内容如下所示:

     "echo '{{oos-secret:password}}' | passwd '{{oos:username}}' --stdin"

    其中,{{oos-secret:password}}表示用户新密码由OOS参数仓库的加密参数password定义;{{oos:username}}表示用户名由OOS参数仓库的普通参数username定义。

    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.ecs.model.v20140526.RunCommandRequest;
    import com.aliyuncs.ecs.model.v20140526.RunCommandResponse;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ChangePassword {
        public static void main(String[] args) {
            // 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
            // 工程代码泄露可能会导致AccessKey泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取AccessKey的方式进行调用,建议使用更安全的STS方式。
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            IAcsClient client = new DefaultAcsClient(profile);
    
            RunCommandRequest request = new RunCommandRequest();
            // 设置实例所在的地域。
            request.setRegionId("cn-hangzhou");
            // 设置云助手命令的语言类型,示例表示使用shell语言。
            request.setType("RunShellScript");
            // 设置云助手命令内容,示例表示为Linux的用户(用户名为username取值)修改密码(密码为password取值)。
            request.setCommandContent(
                    "echo '{{oos-secret:password}}' | passwd '{{oos:username}}' --stdin");
    
            List<String> instanceIdList = new ArrayList<String>();
            instanceIdList.add("i-bp1dktddjsg7oh11****");
            request.setInstanceIds(instanceIdList);
            request.setEnableParameter(true);
    
            try {
                RunCommandResponse response = client.getAcsResponse(request);
                System.out.println(new Gson().toJson(response));
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                System.out.println("ErrCode:" + e.getErrCode());
                System.out.println("ErrMsg:" + e.getErrMsg());
                System.out.println("RequestId:" + e.getRequestId());
            }
        }
    
    }

    执行结果如下所示:

    {
        "requestId": "C73D7B90-6503-4DB4-844C-9412AC55ECC5",
        "commandId": "c-hz01hnyd4e8****",
        "invokeId": "t-hz01hnyd4ed****"
    }
  4. 检查云助手命令执行结果。

    您可以使用修改后的密码远程登录ECS实例,确认云助手命令是否生效。具体操作,请参见通过密码或密钥认证登录Linux实例。

相关文章

OpenVPN场景添加云助手服务端的IP地址到白名单 2025-04-01 12:00

Windows实例上配置了OpenVPN后,云助手将无法正常运行。在该场景下,您可以通过在OpenVPN中将云助手服务端的IP地址添加到白名单,实现云助手正常使用。 OpenVPN参数介绍

使用云助手在容器内执行命令 2025-04-01 12:00

相比远程连接Linux实例后,在Linux实例上连接容器并执行命令的方式,云助手可以免密码、免登录、无需使用跳板机直接连接Linux容器并执行命令,操作更加简化。您可以在调用云助手API接口(RunCommand或InvokeCommand)时,指定Kubernetes容器信息(ContainerI

在云助手命令中使用OOS参数仓库 2025-04-01 12:00

在云助手命令中使用自定义参数,可以更加灵活地编写脚本,提高命令的复用性。同时,系统运维管理OOS提供参数仓库功能,支持普通参数和加密参数。您可以在云助手命令中结合OOS的参数仓库功能,更为方便和安全地管理自定义参数。

授权RAM用户使用云助手 2025-04-01 12:00

您可以授予RAM用户不同的RAM策略,从而提升或降低RAM用户的权限级别,实现更安全可控的访问,并有效降低阿里云账号AccessKey密钥被泄露的风险。本文介绍了授权步骤,并给出了云助手相关的RAM策略示例。 背景信息 权限策略分为您自行创建的自定义

设置普通用户执行云助手命令 2025-04-01 12:00

使用最小权限执行命令是权限管理的最佳实践,建议您以普通用户身份执行云助手命令。本文介绍如何通过RAM用户的权限控制,实现普通用户(非root或system用户)执行云助手命令。 前提条件 ECS实例中已创建普通用户,本文以普通用户user01、user02为

通过SDK执行命令 2025-04-01 12:00

云助手命令可以在多台ECS实例中批量执行Shell、Bat或者PowerShell脚本。本文介绍如何通过ECS SDK运行云助手命令和查询云助手命令执行结果。 前提条件

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号