使用 VMAccess 扩展程序重置 Linux 虚拟机的登录凭据

 Ning KuangWSSC WS ARD 高级项目经理

您是否曾经因为忘记 Azure VM 密码或 SSH 密钥而导致无法访问 VM?VMAccess 扩展程序使您可以重置密码、SSH 密钥或 SSH 配置,以便重新获得访问权限。

此扩展程序针对 Linux VM。对于 Windows VM,请单击此处获取详细信息。

如果这是您第一次使用 VM 扩展程序,您可以查阅此处获取背景信息。

先决条件

  • 微软 Azure Linux 代理 2.0.5 或更高版本。请注意,大多数 Azure 虚拟机 Linux 镜像库都包含 2.0.5 版本。您可以通过运行 waagent -version 来确认此版本已安装在虚拟机中。为保证扩展程序最佳用户体验,建议按照本文结尾“其他注意事项”中的步骤更新到最新版本。
  • Azure PowerShell。请注意,针对扩展程序的跨平台 CLI 支持有望在未来几周内推出。
  • 您想要对您的 VM 重置的新密码或 SSH 密钥。

使用 VMAccess 扩展程序

根据您想要为 VM 重置的内容,VMAccess 的使用有 5 种场景。以下将介绍这些场景和对应的 PowerShell 示例脚本。请注意,您只需为每种场景指定不同的参数,“开始执行” 这行注释之后的第二部分在不同场景中均相同。脚本非常简单。

1. 仅重置密码

#用于重置密码的示例脚本

#指定虚拟机

$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’

#输入您当前的用户名和新密码

$UserName = "CurrentName"

$Password = "NewPassword"

$PrivateConfig = '{"username":"'+ $UserName + '", "password":"' +  $Password + '”}'

#开始执行

$ExtensionName = 'VMAccessForLinux'

$Publisher = 'Microsoft.OSTCExtensions'

$Version =  '1.0'

Set-AzureVMExtension -ExtensionName $ExtensionName -VM  $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfig | Update-AzureVM

2. 仅重置 SSH 密钥

#用于重置 SSH 密钥的示例脚本

#指定虚拟机

$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’

#输入当前用户名和您的新公共 SSH 密钥的路径

$UserName = "CurrentName"

$cert = Get-Content "CertPath"

$PrivateConfig = '{"username":"'+ $UserName + '", "ssh_key":"'+ $cert + '"}'

#开始执行

$ExtensionName = 'VMAccessForLinux'

$Publisher = 'Microsoft.OSTCExtensions'

$Version =  '1.0'

Set-AzureVMExtension -ExtensionName $ExtensionName -VM  $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfig | Update-AzureVM

 3. 重置密码和 SSH 密钥

#用于重置密码和 SSH 密钥的示例脚本

#指定虚拟机

$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’

#输入新密码、新 SSH 公共密钥的证书路径以及当前用户名

$UserName = "CurrentName"        

$Password = "NewPassword"

$cert = Get-Content "CertPath"

$PrivateConfig = '{"username":"'+ $UserName + '", "password":"' +  $Password + '", "ssh_key":"'+ $cert + '"}'

#开始执行

$ExtensionName = 'VMAccessForLinux'

$Publisher = 'Microsoft.OSTCExtensions'

$Version =  '1.0'

Set-AzureVMExtension -ExtensionName $ExtensionName -VM  $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfig | Update-AzureVM

4. 创建新的 sudo 用户帐户

如果您忘记用户名,可以使用 VMAccess 创建一个具有 sudo 权限的新用户名。请注意,在这种情况下,您的原始用户名和登录密钥不会被修改,它们应该仍然有效。

要创建具有密码访问权限的新 sudo 用户,请使用场景 1 中的脚本;要创建具有 SSH 密钥访问权限的新 sudo 用户,请使用场景 2 中的脚本;您也可以使用场景 3 来创建具有两种访问权限的新用户;记住您需要将“UserName”更改为新的用户名。

5. 重置 SSH 配置

如果 SSH 配置混乱,您也可能会失去对 VM 的访问权限。您可以使用 VMAccess 扩展程序将配置重置为默认配置。要执行此操作,您只需使用下面的示例脚本。扩展程序会重新启动 SSH 服务器,打开 VM 上的 SSH 端口,将 SSH 配置重置为默认配置。您的 VM 的用户帐户(密码或 SSH 密钥)保持不变。

请注意,被重置的 SSH 配置文件位于 /etc/ssh/sshd_config。

#用于重置 VM 上的 SSH 配置的示例脚本

#指定虚拟机

$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’

$PrivateConfig = '{"reset_ssh":"True"}'

#开始执行

$ExtensionName = 'VMAccessForLinux'

$Publisher = 'Microsoft.OSTCExtensions'

$Version =  '1.0'

Set-AzureVMExtension -ExtensionName $ExtensionName -VM  $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfig | Update-AzureVM

查询结果

可以使用 Azure PowerShell Cmdlet “Get-AzureVM” 或 “Get-Deployment” 检索 VMAccess 扩展程序的状态。

重置后访问 VM

VMAccess 扩展程序重置凭据和配置后,您可以使用新的帐户名、密码或 SSH 密钥登录到虚拟机。

其他注意事项

  • 请注意,如果只想重置现有用户帐户的密码或 SSH 密钥,则需要确保输入的用户名与原始用户名匹配。如果您输入的名称与原始用户名不一致,VMAccess 扩展程序会判定为场景 4 并创建新的用户帐户。
  • 更新到WALA 2.0.8的方法
  1. 从Github下载 WALA 2.0.8 的源代码  # wget https://raw.githubusercontent.com/Azure/WALinuxAgent/WALinuxAgent-2.0.8/waagent
  2. 为waagent文件添加“可执行”的权限    # chmod +x waagent
  3. 替换 /usr/sbin/目录下的waagent文件 # cp waagent /usr/sbin
  4. 重启waagent服务

# service waagent restart

(如果你使用的是Ubuntu,需要将上述命令中的“waagent” 替换为“walinuxagent”)

注意:1. 如需要更新到其他版本,请参看GitHub说明。2. 运行以上命令需要Root权限。

 

本文翻译自:https://azure.microsoft.com/blog/2014/08/25/using-vmaccess-extension-to-reset-login-credentials-for-linux-vm/