全部产品
Search
文档中心

云服务器 ECS:在线重置实例密码原理说明

更新时间:Dec 28, 2023

阿里云支持在线重置ECS实例的登录密码,修改后您无需控制台重启ECS实例即可生效。本文介绍在线重置实例登录密码涉及的实现原理。

功能说明

您在使用重置实例密码功能时,可以选择通过在线重置密码功能修改ECS实例的登录密码,修改完成后无需在控制台重启ECS实例即可生效。在线重置实例密码

在线重置实例密码主要通过系统运维管理的加密参数和模板实现。在实现过程中,会使用到云服务器ECS、系统运维管理、资源编排服务ROS和密钥管理服务KMS等相关产品。具体实现过程,请参见实现原理

同时,在使用在线重置实例密码功能前,需要符合以下条件:

  • 需要使用阿里云账号操作,不支持RAM用户操作。

  • 仅支持专有网络VPC,不支持经典网络。

  • 需要已开通密钥管理服务KMS。具体操作,请参见开通密钥管理服务

  • ECS实例处于运行中running)状态。

  • ECS实例未授予RAM角色。

实现原理

在线重置实例密码主要通过以下流程实现:

image

在线重置实例密码功能通过加密参数功能实现密码加密;通过OOS模板功能定义所需要编排的运维操作。具体信息,请参见加密参数模板概述。具体流程说明如下表所示。

流程

步骤

说明

创建加密参数

在OOS的参数仓库中,根据用户输入的明文密码,创建加密参数。

查询ECS实例是否绑定RAM角色

查询ECS实例是否已绑定RAM角色。

  • 如果已经绑定RAM角色,执行报错。

  • 如果未绑定RAM角色,执行下一步。

创建RAM角色和权限策略

通过ROS资源栈为ECS创建RAM角色和权限策略。

权限策略的策略内容如下:

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "kms:*",
                "oos:*"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}

为RAM角色授予权限策略

通过ROS资源栈为RAM角色授予权限策略。

RAM角色的信任策略内容如下:

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "oos.aliyuncs.com",
          "ecs.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

为ECS实例授予RAM角色

将创建的RAM角色绑定到目标ECS实例。

查询ECS实例操作系统

查询ECS实例的操作系统类型。

ACS::ECS::RunCommand

根据ECS实例的操作系统类型,执行修改用户密码的命令。

  • 如果是Linux实例,执行以下命令:

    echo '{{username}}:{{passwordParameter}}'|chpasswd
    
    if [ $? -eq 0 ]; then
        if grep -q "PasswordAuthentication no" /etc/ssh/sshd_config;then
            sed -i "s/PasswordAuthentication no/PasswordAuthentication yes/g" /etc/ssh/sshd_config
            systemctl restart sshd
        fi
    else
        exit 1;
    fi
  • 如果是Windows实例,执行以下命令:

    net user {{username}} "{{passwordParameter}}"

收回ECS实例的RAM角色

回收ECS实例上的RAM角色。

删除RAM角色和权限策略

删除RAM角色和权限策略。

删除加密参数

删除创建的加密参数。