PowerCLI を使って ESXi の忘れた root パスワードをリセットする

Share on:

Table of contents

概要

前回の記事ではホストプロファイルで ESXi の root ユーザーのパスワードをリセットしました。

今回の記事は PowerCLI を使用し vCenter Server 経由で ESXi の root ユーザーのパスワードをリセットしてみます。ホストプロファイルは vSphere Enterprise Plus が必要となる機能ですが、PowerCLI は vSphere Essentials 以上の全てのエディションで使用可能です。

なお、前回の記事と同様に ESXi が vCenter Server に管理・接続されていることが前提となります。

ESXi のローカルユーザーの管理

ESXi のローカルユーザーを管理する手段としては主に以下の2つがあります。vCenter Server のユーザーが ESXi のローカルユーザーを直接管理することはできません。

  • Host Client を使用する
  • esxcli system account コマンドを使用する

今回は PowerCLI を使用して後者の esxcli を呼び出すことで ESXi のローカルユーザーを操作します。

なお、esxcli system account コマンドは vSphere 6.0 のリリースから追加されています。

vSphere Command-Line Interface 6.0 Release Notes

ESXCLI new and changed commands — New commands have been added and one command has changed.

The following commands have been added to the ESXCLI command set. … esxcli system account add esxcli system account list esxcli system account remove esxcli system account set

PowerCLI から esxcli を呼び出すまで

以下の手順を踏むことで PowerCLI で esxcli のオブジェクトを取得できます。

  1. Connect-VIServer で vCenter Server に接続
  2. Get-VMHost で ESXi のオブジェクトを取得
  3. Get-EsxCli で esxcli のオブジェクトを取得

対象のホストの esxcli オブジェクトが取得できたら、通常の esxcli コマンドを “.” で繋げてプロパティやメソッドとして呼び出せます。

Get-EsxCli Command | VMware PowerCLI Reference

1Example 6
2
3PS C:\>  $vmHost = Get-VMHost "vmHostIp"
4>>  $esxcli_v1 = Get-EsxCli -VMHost $vmHost
5>>  $esxcli_v1.storage.nmp.device.list()

ESXi の root ユーザーのパスワードをリセット

esxcli system account set コマンドで ESXi の既存のローカルユーザーの設定変更が可能です。このため、以下のような PowerCLI のスクリプトを実行すれば vCenter Server を経由して ESXi の root ユーザーのパスワードを変更できます。

 1$VC_HOSTNAME = "vcsa.api.lab"
 2$USERNAME = "administrator@vsphere.local"
 3$PASSWORD = "VMware1!"
 4
 5$TGT_HOST = "esxi01.api.lab"
 6$TGT_USER = "root"
 7$NEW_PASSWORD = "Vmware@123"
 8
 9$securePassword = ConvertTo-SecureString $PASSWORD -AsPlainText -Force
10$cred = New-Object System.Management.Automation.PSCredential($USERNAME, $securepassword)
11
12Connect-VIServer -Server $VC_HOSTNAME -Credential $CRED
13
14$vmHost = Get-VMHost $TGT_HOST
15$esxcli = Get-EsxCli -VMHost $vmHost -V2
16
17$arguments = $esxcli.system.account.set.CreateArgs()
18$arguments.id = $TGT_USER
19$arguments.password = $NEW_PASSWORD
20$arguments.passwordconfirmation = $NEW_PASSWORD
21
22$esxcli.system.account.set.Invoke($arguments)

上のスクリプトでは17行目以降が esxcli system account set コマンドを実行している部分です。esxcli に引数を指定する場合には CreateArgs メソッドを呼び出すことでコマンドに対応する引数の Hashtable オブジェクトが返されます。この Hashtable に値をセットしてから Invoke メソッドに渡すことで、esxcli コマンドを引数つきで実行しています。

1> $esxcli.system.account.set.CreateArgs()
2
3Name                           Value
4----                           -----
5description                    Unset, ([string], optional)
6passwordconfirmation           Unset, ([string], optional)
7password                       Unset, ([string], optional)
8id                             Unset, ([string])

vCenter Server によるホスト操作と vpxuser

先に記載したように、vCenter Server のユーザーが ESXi のローカルユーザーを直接管理することはできません。vCenter Server が ESXi を操作する場合は vpxuser という特別な ESXi のローカルユーザーを使用します。

ESXi ホストの権限の割り当て

vpxuser ユーザー

vCenter Server では、vpxuser の権限を使用して、ホストに対するアクティビティを管理します。

vCenter Server の管理者は、root ユーザーとほぼ同様のタスクをホストで実行できます。また、タスクのスケジュール設定やテンプレートの使用も可能です。ただし、vCenter Server の管理者は、ホストのユーザーおよびグループを直接作成、削除、または編集することはできません。管理者権限を持つユーザーのみが、ホストで直接これらのタスクを実行することができます。

今回の PowerCLI を使用するケースも vCenter Server を経由して ESXi を操作しているため、ESXi 上では vpxuser ユーザーによりタスクが実行されています。実際に hostd のログを見てみると vpxuser によってタスクが実行されていることが分かります。

12021-12-16T11:39:47.742Z info hostd[70723] [Originator@6876 sub=Vimsvc.TaskManager opID=27aab9-dd-9541-9542 user=vpxuser:VSPHERE.LOCAL\Administrator] Task Created : haTask--vim.EsxCLI.system.account.set-959618778
2
32021-12-16T11:39:47.910Z info hostd[67477] [Originator@6876 sub=Vimsvc.TaskManager opID=3f42954a user=vpxuser] Task Created : haTask-ha-folder-root-vim.host.LocalAccountManager.updateUser-959618780
42021-12-16T11:39:47.972Z info hostd[70722] [Originator@6876 sub=Vimsvc.ha-eventmgr opID=3f42954a user=vpxuser] Event 429 : Password was changed for account root on host localhost.localdomain
52021-12-16T11:39:47.972Z info hostd[70722] [Originator@6876 sub=Vimsvc.TaskManager opID=3f42954a user=vpxuser] Task Completed : haTask-ha-folder-root-vim.host.LocalAccountManager.updateUser-959618780 Status success
6
72021-12-16T11:39:48.003Z info hostd[67470] [Originator@6876 sub=Vimsvc.TaskManager opID=27aab9-dd-9541-9542 user=vpxuser:VSPHERE.LOCAL\Administrator] Task Completed : haTask--vim.EsxCLI.system.account.set-959618778 Status success

おわりに

今回は PowerCLI を使用して ESXi の root ユーザーのパスワードをリセットしてみました。前回の記事と同様に vCenter Server に管理・接続されている必要はありますが、PowerCLI は全てのエディションで使用できて柔軟性もありますので、vSphere ユーザーの方は PowerCLI も使えるようにしておくと便利だと思います。