ドメインから抜けてコンピュータをリブートしたとき、はたと青ざめた経験はありませんか?いざ、というときになって、ローカル管理者のパスワードがわからないことに気づくようなことは、多くの人が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
成功したことがわかります。
もし、新しい管理者パスワードで VM にログインできない場合は、VM を再起動する必要があります。
$vm | Restart-AzVM
立ち上がったら、新しい管理者パスワードでログインできるようになっているはずです。
まとめ
このブログでは、Azure VM エージェントを使用して Azure VM のパスワードをリセットする方法を説明しました。もし、管理者パスワードを忘れても、このトリックが使えます。