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

功能说明

您在使用重置实例密码功能时,可以选择通过在线重置密码功能修改ECS实例的登录密码,修改完成后无需在控制台重启ECS实例即可生效。在线重置
说明 目前在线重置密码功能仅在部分地域邀请测试中。

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

同时,在使用在线重置实例密码功能前,需要符合以下条件:
  • 需要使用阿里云账号操作,不支持RAM用户操作。
  • 仅支持专有网络VPC,不支持经典网络。
  • 需要已开通密钥管理服务KMS。具体操作,请参见开通密钥管理服务
  • ECS实例处于运行中running)状态。
  • ECS实例未授予RAM角色。

实现原理

在线重置实例密码主要通过以下流程实现:模板流程
在线重置实例密码功能通过加密参数功能实现密码加密;通过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角色和权限策略。
删除加密参数 删除创建的加密参数。