ドメインから抜けてコンピュータをリブートしたとき、はたと青ざめた経験はありませんか?いざ、というときになって、ローカル管理者のパスワードがわからないことに気づくようなことは、多くの人が1回は経験する失態です。ですが、Azure VMの場合はその心配がありません。VM 拡張機能を使用すると、VM のパスワードをフラッシュでリセットできます。

Microsoft は、Azure VM 管理者に、管理者パスワードリセットプロセスへのバックドアを提供しています。管理者パスワードを忘れたとしても、Azure ポータルのサブスクリプションの資格情報さえ知っていれば、うろたえる必要はありません。

VM パスワードのリセットには、Azure ポータルを使う方法と、PowerShell による方法の二通りがありますが、このブログでは PowerShell を使用する方法を説明します。簡単で、複数の VM に対して一度に行うことができます(本当に愚かな失敗をしてしまった場合のため)。

 

前提条件

Azure VM で管理者パスワードをリセットするには、まず、VM エージェントがインストールされていることを確認します。Azure PowerShell モジュール(Install-Module -Name Az)も必要です。

ギャラリーのイメージを介して構築された VM の場合は、VM エージェントはすでにインストールされているはずですが、独自のイメージを Azure にアップロードした場合は、VM エージェントがインストールされていることを確認する必要があります。

Azure に接続

前提条件が整ったら、Azure VM の管理者パスワードのリセットに取り掛かれますが、まず Azure に接続して認証を得ます。

PS51> Connect-AzAccount

ローカル管理者のパスワードリセットの手順

次に、VM を見つけて $vm 変数値に割り当てますが、事前に、VM エージェントがインストールされていることを確認しておいてください。

$vm = Get-AzVM -Name myvm -ResourceGroupName adbdemoresourcegroup

次に、OSProfile の下に埋め込まれた ProvisionVMAgent プロパティをチェックします。これは True または False を返します。

$vm.OSProfile.WindowsConfiguration.ProvisionVMAgent

これで、Set-AzureRmVMAccessExtension コマンドレットを使用してローカル管理者パスワードのリセットを試みることができます。このコマンドレットには7つの異なるパラメータが必要です。パラメータを整理しておくと便利なので、PowerShell スプラッティングを使用することにします。まずパラメータをハッシュテーブルに配置します。

$extensionParams = @{
    'VMName' = $vm.Name
    'Username' = $vm.OSProfile.AdminUsername
    'Password' = <Password>
    'ResourceGroupName' = $vm.ResourceGroupName
    'Name' = <AnyNameOfThisTask>
    'Location' = $vm.Location
}

上では6つのパラメータが示されていますが、残りの1つは少し複雑で取得するのにもうひと手間かかる、TypeHandlerVersion と呼ばれるパラメータです。このパラメータを取得するには、次のように Get-AzureRmVMExtensionImage コマンドレットを実行します。

$typeParams = @{
 'PublisherName' = 'Microsoft.Compute'
 'Type' = 'VMAccessAgent'
 'Location' = $vm.Location
}

$typeHandlerVersion = (Get-AzVMExtensionImage @typeParams | Sort-Object Version -Descending | Select-Object -first 1).Version

7つのパラメータは次のようになります。

$extensionParams = @{
 'VMName' = $vm.Name
 'Username' = $vm.OSProfile.AdminUsername
 'Password' = <Password>
 'ResourceGroupName' = $vm.ResourceGroupName
 'Name' = <AnyNameOfThisTask>
 'Location' = $vm.Location
 'TypeHandlerVersion' = $typeHandlerVersion
}

いくつかのパラメータには、$vm 変数を使っており、このオペレーションにはタスクの名前とパスワードを入力するだけで済みます。

変更を加えるためにコマンドを呼び出します。

Set-AzVMAccessExtension @extensionParams

Reset-Password-image2

成功したことがわかります。

もし、新しい管理者パスワードで VM にログインできない場合は、VM を再起動する必要があります。

$vm | Restart-AzVM

立ち上がったら、新しい管理者パスワードでログインできるようになっているはずです。

まとめ

このブログでは、Azure VM エージェントを使用して Azure VM のパスワードをリセットする方法を説明しました。もし、管理者パスワードを忘れても、このトリックが使えます。

Tags