Azure云计算

如何使用Azure资源管理器的REST API来修改ResourceManage虚拟机管理员登陆凭证

何为Azure 资源管理器(Azure Resource Manager)?

Azure 资源管理器是(简称ARM) Azure 的部署和管理服务。 它提供一个管理层用于在 Azure 订阅中创建、更新和删除资源。 部署后,可以使用访问控制、锁和标记等管理功能来保护和组织资源。

在Azure 开发中,我们可能会需要修改虚拟机管理员的登陆凭证。而许多开发者可能尝试过使用和虚拟机相关的Azure 资源管理器的(ARM) REST API 来修改虚拟机管理员的登陆凭证,但是并不奏效。本篇文章会引导大家如何使用ARM REST API 来修改RM虚拟机的管理员登录凭证。

//andyx.net/storage/2020/03/Banner_MS-Azure_logo_horiz_c-gray_rgb_andyx.net_.png插图

对于Azure RM 虚拟机而言,要修改管理员登陆凭证需要通过虚拟机插件。对于windows 虚拟机需要安装“VMAccess Agent”插件,而对于Linux虚拟机,需要安装“VMAccess”插件。但是不用担心,安装并通过插件修改登陆凭证只需调用一个API即可。

下面是在Azure中国版以及Azure国际版修改登录凭证的介绍:

API 请求URL(Azure中国版-世纪互联):

PUT management.chinacloudapi.cn/subscriptions/[订阅ID]/resourceGroups/[资源组名]/providers/Microsoft.Compute/virtualMachines/[虚拟机名]/extensions/enablevmaccess?api-version=2016-03-30

API 请求URL(Azure国际版-微软):

PUT management.azure.com/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Compute/virtualMachines/[vm name]/extensions/enablevmaccess?api-version=2016-03-30

Linux 虚拟机请求Body:

{
    "properties": {
      "publisher": "Microsoft.OSTCExtensions",
      "type": "VMAccessForLinux",
      "typeHandlerVersion": "1.4",
      "protectedSettings": {
        "username": "[必填项,string,您vm现在管理员的username]",
        "password": "[可选项,string,新密码 必须符合相关密码要求]",
        "ssh_key": "[可选项,用户的公钥]",
        "reset_ssh": [可选项,boolean,是否重置ssh],
        "remove_user": "[可选项,string,需要删除的管理员名]",
        "expiration": "[可选项,string,不填默认永不过期,格式:2016-01-01]"
      }
    },
"location": "[您虚拟机所在的地域]" 
}

ssh_key支持ssh-rsa和.pem 格式

如果您的公钥格式为ssh-rsa,那么您可以以这样的格式写入:

"ssh_key": "ssh-rsa XXXXXXXX"

如果您的公钥格式为.pem,您可以使用下面的UNIX命令来转化.pem 文件为一能被JSON传输的字符串值:

awk 'NF {sub(/\r/, ""); printf "%s\n",$0;}' myCert.pem

然后,以这样的格式写入:

"ssh_key": "-----BEGIN CERTIFICATE-----\nXXXXXXXXXXXXXXXXXXXXXXXX\n-----END CERTIFICATE-----"

Windows虚拟机请求body:

{
    "properties": {
      "publisher": "Microsoft.Compute",
      "type": "VMAccessAgent",
      "typeHandlerVersion": "2.0",
      "protectedSettings": {
        "UserName": "[string,您vm现在管理员的username]",
        "Password": "[新密码,string,必须符合相关密码要求]"
      }
    },
    "location": "您虚拟机所在的地域"
}

注意:请求body中json数据的大小写需要格外注意,特别是请求中“Username”和“Password”这两个属性。


调用上述API可以为您的虚拟机安装所需插件(若之前没有安装),然后修改管理员登录凭证。

请求成功后,可以通过上述REST API的GET方法取得修改状态,在GET方法的返回结果中,有一个provisioningState字段,当该字段的值为“Creating”或者“Updating”时,则安装插件或者修改操作正在进行(整个过程大概有20-30秒)。

provisioningState字段的值为“Succeeded”时,说明操作已经完成,登录凭证已经被修改。如果provisioningState的值很快就变成“Succeeded”,可能请求时出现问题,需要检查请求是否存在问题,因为每次请求都会耗时大概20-30秒。

(END)

文章源自:Dev Chat 在线支持

作者:

打赏 赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏