最近在项目中交付的虚拟机实验环境,突然出现了“the trust relationship between this workstation and the primary domain failed”的问题,导致许多测试的虚拟机无法登陆到域环境。
这个问题倒是如何造成的呢?坦白讲你可以去必应谷歌一下类似的问题,多半会告诉你这个错误的通常由于访问的主机不能再确保可以和当前加入的活动目录域进行安全通信造成的。当前主机的私有安全凭据和域控制器中的值不匹配。当然简单的可以把安全凭据理解为密码,实际上你知道域环境通过非常严格Kerberos验证,因此实际是Kerberos的Keytable的加密存储在本地安全授权子系统中;因此如果在主机上以域账户登录时,如果验证在本地存储的私有凭据和收到来自ActiveDirectory 的 Kerberos票据不匹配时,系统会认为不安全并且信任关系建立失败。
当然这个错误多数是由于系统时间与域控制器上的系统时间不同步造成;考虑在虚拟机的环境,刷新虚拟机到某个时间点的快照,很可能是几个月甚至几年前的;那么当这台机器被重置时,很可能不存在在此期间域控制器执行的自动密码更改,要知道在与环境下这个主机密码必须保持安全域的完整性。
那么出现这个问题,如何解决呢?最简单的方法,也是在我们的活动中我开始建议学员采用的,重新恢复和建立信任关系,通过在本地登录虚拟机然后设置脱离域环境再加入域的方法,这个方法会删除并重新建立主机密码再加入到域中。具体的做法可以参考的KB。
不过考虑到实际应用中,很多学员反映这个方法需要重新启动两次虚拟机,时间太慢;而且对于如果安装了企业根证书服务的虚拟机可能就无法简单的通过退域并且重新加入域的方法实现;因此在我们的Windows Server 2012中使用了Powershell V3版本中挖掘到一个简单的方式,在V3版本中提供了一个重置计算机账号的方法 ,打开Powershell控制台,运行Reset-ComputerMachinePassword的cmdlet就可以重置计算机账户并不需要重新启动虚拟机,就可以重新建立域信任关系了。
因此我们采用的简单方式就是以管理员登录本机,然后重置计算机账号,退出改用域账户登录,然后问题解决:)