PowerCLI を使って ESXi の忘れた root パスワードをリセットする
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 のオブジェクトを取得できます。
- Connect-VIServer で vCenter Server に接続
- Get-VMHost で ESXi のオブジェクトを取得
- 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 のローカルユーザーを使用します。
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 も使えるようにしておくと便利だと思います。