何为Azure 资源管理器(Azure Resource Manager)?
Azure 资源管理器是(简称ARM) Azure 的部署和管理服务。 它提供一个管理层用于在 Azure 订阅中创建、更新和删除资源。 部署后,可以使用访问控制、锁和标记等管理功能来保护和组织资源。
在Azure 开发中,我们可能会需要修改虚拟机管理员的登陆凭证。而许多开发者可能尝试过使用和虚拟机相关的Azure 资源管理器的(ARM) REST API 来修改虚拟机管理员的登陆凭证,但是并不奏效。本篇文章会引导大家如何使用ARM REST API 来修改RM虚拟机的管理员登录凭证。
对于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 在线支持
作者: