重置ESXi root密码

我刚刚inheritance了一个非常简单的VM安装程序,其中一对ESXi服务器集群化,一切都相当接近。 问题是我没有服务器的根密码,没有人知道它们是什么(已经尝试过密码猜测)。

根据我的理解,ESXi没有单用户模式或任何等效的模式。 我的备选scheme没有备份虚拟机和网站?

    对于ESXi ,更改密码的唯一受支持的方法是重新安装。

    重新安装ESXi主机是在ESXi上重置密码的唯一受支持方式。 由于ESXi体系结构的复杂性,任何其他方法都可能导致主机故障或不受支持的configuration。 ESXi没有服务控制台,因此传统的Linux重置密码的方法(如单用户模式)不适用。

    如果您有两台主机,并且有足够的资源来支持它,则可以将vMotion(和/或Storage vMotion)服务器全部装载到一台主机上,然后删除并重build空白主机,将其重新添加到群集中。 然后将所有客人移到重build的主机上,并删除/重build剩余的主机。 这将允许您重build,而不会招致客人的任何停机时间。 根据您的基础设施和取决于要移动的虚拟机数量,两台主机的重build时间不应超过一天,除非您有非常大的或复杂的主机configuration。

    另外,如果您使用的是旧版本的ESXi,那么现在也是检查当前硬件与HCL的最佳时间,如果支持,则升级到最新版本(当然首先要升级vCenter Server)。

    关于我提到的不支持的方法,但不一定build议。

    • 使用vCenter将每个主机连接到AD域,并将AD用户设置为主机的pipe理员并允许AD身份validation。 使用vSphere客户端使用AD凭据直接连接到主机以进行login。 一旦以这种方式连接,您应该可以通过直接连接到主机的vSphere客户端更改根帐户的密码。 我已经用它捏,它确实工作。
    • 生成指定密码的主机configuration文件并将其附加到主机。 这可以完成,但仍然需要主机进入维护模式。 我个人没有使用这个方法。

    如果您具有对服务器的物理或带外访问权限,则有方法可以重置ESXi主机的root密码。

    • 我已经通过将主机configuration文件从其他主机收集的configuration文件重新应用到受影响的服务器来完成此操作。 但是你可能没有许可来支持这个。
    • 我还必须使用引导CD / Live CD方法 ( 也在这里 ),它假定了一些Linux知识,并在影子文件中设置一个空密码或一个已知的encryption密码。

    至于如何发生这种情况……糟糕的文档,恶意终止的pipe理员,一个数据中心技术人员在构build服务器时离开CAPS-LOCK, 我的内存不足等等:)

    ESXi root密码被encryption并存储在名为/ ect / shadow的文件中。 正如本文介绍的那样,您可以通过以下步骤删除root密码:

    1. 从Ubuntu Live CD引导您的服务器。
    2. 解压缩state.tgz然后local.tgz,删除shadow文件里面的密码哈希,然后重新打包压缩文件。
    3. 之后,您可以作为root帐户loginESXi主机,而无需input密码。

    对于ESXi 6为我工作:

    # https://www.linkedin.com/pulse/reset-esxi-root-password-through-vcenter-esxcli-method-buschhaus #First, setup $vmhosts. You can do this many ways.$vmhosts = Get-Cluster -Name ClusterWithUnknownPassword | Get-VMHost  # Just so it contains one or more VMHost objects. # To reset all ESXi host passwords use # $vmhosts = Get-VMHost $NewCredential = Get-Credential -UserName "root" -Message "Enter an existing ESXi username (not vCenter), and what you want their password to be reset to." Foreach ($vmhost in $vmhosts) { $esxcli = get-esxcli -vmhost $vmhost -v2 #Gain access to ESXCLI on the host. $esxcliargs = $esxcli.system.account.set.CreateArgs() #Get Parameter list (Arguments) $esxcliargs.id = $NewCredential.UserName #Specify the user to reset $esxcliargs.password = $NewCredential.GetNetworkCredential().Password #Specify the new password $esxcliargs.passwordconfirmation = $NewCredential.GetNetworkCredential().Password Write-Host ("Resetting password for: " + $vmhost) #Debug line so admin can see what's happening. $esxcli.system.account.set.Invoke($esxcliargs) #Run command, if returns "true" it was successful. }