Sometimes you run into a vCenter issue where the situation is not just broken, but dangerously broken.
This is one of those cases.
If your vCenter is throwing vmdird authentication failures like the ones below, and the normal machine account password reset procedure does not fix it, your vCenter may already be in a very bad state:
err vmdird t@140245530842880: Bind Request Failed (x.x.x.x) error 49: Protocol version: 3, Bind DN: "cn=vcsa,ou=Domain Controllers,dc=vsphere,dc=local", Method: SASL
err vmdird t@140245530842880: SASLSessionStep: sasl error (-13)(SASL(-13): authentication failure: client evidence does not match what we calculated. Probably a password error)
Let me be very clear: this is a serious recovery situation.
Any remediation from this point is potentially destructive and provided as-is with no guarantee of success. You should assume that services may fail to return cleanly, additional repair steps may be required, certificate repair or endpoint re-registration may become necessary, and in the worst case full recovery may fail.
So do not treat this as a casual “run a command and move on” type of issue.
What usually points to this problem
Normally, when you see this kind of error 49 and SASL bind failure in vmdird, the standard assumption is that the machine account password is out of sync.
The normal fix is the Broadcom machine account password reset procedure.
But in this case, the standard fix does not actually fix the issue.
You reset the password.
The commands complete.
And then you still get the same bind error afterward.
That is the clue that tells you this is probably not a normal password mismatch.
The usual reset workflow is documented here and recovery steps in this article should not be used unless the official steps has failed:
- Broadcom KB 319348 – Machine account password mismatch recovery
https://knowledge.broadcom.com/external/article?articleNumber=319348 - Broadcom KB 316608 – Password reset script workflow
https://knowledge.broadcom.com/external/article/316608
The standard approach is to generate a new password, update dcAccountPassword, and then update the LDAP object password.
Validate issue
Before going any further, validate that this is actually the issue you are dealing with.
Start by following Broadcom’s standard machine account password recovery procedures as described in the kb articles linked above.
The standard approach is to:
- generate a new password
- update
dcAccountPassword - update the LDAP object password
- restart vCenter services
If the reset completes successfully but the problem remains, the next step is to validate that the password currently stored in the registry actually works.
Run the following directly on the vCenter over SSH:
# Executed on vCenter using SSH
# Get Existing Password
CURRENTPASS=$(/opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\services\vmdir]' | egrep -i "dcAccountPassword" | sed -e 's/.*dcAccountPassword\"[[:space:]]*REG_SZ[[:space:]]*\"//g'| sed -e 's/"$//')
# Gather variables
DOMAIN=$(/opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\Services\vmafd\Parameters]' | grep DomainName | awk '{print $4}'|tr -d '"')
DOMAINCN="dc=$(echo "$DOMAIN" | sed 's/\./,dc=/g')"
ACCOUNTNAME=$(/opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\Services\vmafd\Parameters]' | grep DCName| awk '{print $4}'|tr -d '"')
MACHINEACCOUNT="cn=$ACCOUNTNAME,ou=Domain Controllers,$DOMAINCN"
# Execute Test Search
/usr/bin/ldapsearch -H ldap://127.0.0.1:389 -x -D"$MACHINEACCOUNT" -w"$CURRENTPASS" -b"dc=vsphere,dc=local" -s base
If this LDAP bind succeeds, the machine account password itself is valid.
At this point, check whether vmdird is still logging the same authentication failures in:
/storage/log/vmware/vmdird/vmdird.log
If the bind test succeeds and the same Bind Request Failed Error 49 continues to appear in the log, this is a strong indicator that the issue is no longer the normal machine account password mismatch covered by the Broadcom KBs.
The next thing to validate is the configured SSO password policy.
Compare your settings against Broadcom’s supported limits:
https://techdocs.broadcom.com/de/de/vmware-cis/live-recovery/live-recovery/saas/edit-password-policies-sso-on-prem.html
If the minimum password length has been configured above 20 characters, there is a high chance that the standard password reset procedure is simply recreating the same broken condition.
As you vCenter is down you might not have the posibility to validate it from vCenter, so you might have to look through documentation or former change requests.
Root cause
The root cause is most likely an unsupported SSO password policy configuration.
Broadcom only supports a minimum password length up to 20 characters. If this value has been configured above that limit, internal password rotations can eventually generate machine account passwords that exceed what this recovery workflow can reliably handle.
That creates a failure loop where the standard machine account password reset procedure appears to complete successfully, but the newly generated password still causes vmdird to log Bind Request Failed Error 49 and prevents core services from starting.
In other words, the password reset itself is not failing.
It is simply reproducing the same unsupported condition.
Recovery Procedure Overview
The recovery strategy is to first get just enough of vCenter back online to regain access to the vSphere Client and correct the unsupported SSO password policy. After that we will create a new valid machine account password.
Information:
This procedure was written for vCenter 8.0 and was tested on vCenter 8.0 Update 3
At a high level, the procedure is:
- Generate the shortest valid password possible within the current policy.
- Reset the machine account password using that temporary value.
- Restart vCenter services and try to bring
vsphere-uionline. - Log in to the vSphere Client and correct the SSO password policy so the minimum password length is no more than 20 characters.
- Repeat Step 3 using the corrected policy
- Restart services again and validate that all expected services return.
- If services are still missing, reboot vCenter and validate again.
- If required, continue with certificate reset and endpoint service re-registration.
The first password reset is only a temporary recovery step intended to create a narrow maintenance window where the UI becomes accessible.
The second password reset, after correcting the policy, is the one that actually resolves the issue.
Step 1 – Generate the shortest valid password possible within the current policy
The goal of this step is not to permanently fix the issue.
At this stage, the only objective is to generate a machine account password that is:
- valid according to the currently broken SSO password policy
- free from unsupported special characters
- hopefully short enough to allow critical services such as
vsphere-uito start
This creates a temporary recovery window where you can access the vSphere Client and correct the unsupported password policy.
The password generated by dir-cli may contain characters that are problematic in this workflow, so I used the following loop to keep generating passwords until I got one that was safe to use:
Important:
Even though you vCenter is not working, it will allways be a good idea to create a snapshot of you vCenter in case things turn out even worse. Remember to snapshot all vCenter is they are linked.
# Generate Password
USERNAME='administrator@vsphere.local'
PASSWORD='<sso_password>'
while true; do
newpw=$(/usr/lib/vmware-vmafd/bin/dir-cli password create --login $USERNAME --password "$PASSWORD")
if [[ ! "$newpw" =~ [\ \&\;\"\'\^\\%\`] ]]; then
break
fi
# Trying to generate a new password until we get one that is valid
done
# Cut the password to the shortest length allowed by you sso policy - You have to se the minLength variable to the shortest allowed value
minLength=20
newpw="${newpw:0:$minLength}"
The shorter the password is, the better the chance that enough services will come online to continue recovery. The ultimate goal is to get it to 20 or less.
Step 2 – Reset the machine account password using the temporary value
Now use the temporary password from Step 1 to perform the standard machine account password reset.
At this point, the purpose is still only to get enough core services online to regain access to the vSphere Client.
Start by verifying the generated password:
echo $newpw
Then update the local machine account password stored in the vCenter registry:
/opt/likewise/bin/lwregshell set_value '[HKEY_THIS_MACHINE\Services\vmdir]' "dcAccountPassword" "$newpw"
If you get an error that your password is not long enough, alter the password until it is.
Next, update the LDAP object password for the machine account itself.
Important:
If you have replication partners or Enhanced Linked Mode nodes, this must also be corrected on those systems as well.
PSC=$(/opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\Services\vmafd\Parameters]' | grep DCName | awk '{print $4}'|tr -d '"')
DOMAIN=$(/opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\Services\vmafd\Parameters]' | grep DomainName | awk '{print $4}'|tr -d '"')
DOMAINCN="dc=$(echo "$DOMAIN" | sed 's/\./,dc=/g')"
ADMIN="cn=administrator,cn=users,$DOMAINCN"
DN=$(/opt/likewise/bin/lwregshell list_values '[HKEY_THIS_MACHINE\Services\vmdir]' | grep dcAccountDN | awk '{$1=$2=$3="";print $0}'|tr -d '"'|sed -e 's/^[ \t]*//')
/opt/likewise/bin/ldapmodify -h $PSC -p 389 -x -D $ADMIN -w "$PASSWORD" <<EOF
dn: $DN
changetype: modify
replace: userpassword
userpassword: $newpw
EOF
Once both values have been updated, the temporary machine account password is in place and you are ready to test whether enough services can now start.
Step 3 – Restart services and try to bring vsphere-ui online
Now restart all vCenter services and check whether enough of the platform comes online to let you access the vSphere Client.
At this stage, full service recovery is not the success criteria.
The only thing that matters right now is whether critical services such as vsphere-ui, vpxd, and the SSO components come online far enough for you to log in and correct the password policy.
Restart services:
service-control --stop --all
service-control --start --all
After the restart, validate the service state:
service-control --status
What you are looking for here is partial recovery, not perfection.
If vsphere-ui is running and the login page is accessible, continue immediately to the next step and correct the SSO password policy.
If most services still fail to start, do not keep repeating password resets blindly. That usually just recreates the same broken condition.
You might have to call VMware Support to somehow change you SSO password policy directly in the database before you can retry. I you figure out how to do this. Please leave a comment. My situation did not require this step.
Step 4 – Correct the SSO password policy immediately
If you managed to get vsphere-ui online, log in immediately and correct the SSO password policy before doing anything else.
Navigate in vCenter UI to:
Administration > Single Sign On > Configuration > Local Accounts > Password Policy
The important part is the minimum password length.
Make sure it is set to 20 characters or less.
Anything above that is outside Broadcom’s supported limits and can cause the machine account password reset workflow to recreate the same failure condition.
At this point, do not spend time validating other services, certificates, or endpoint registrations yet.
The only thing that matters is correcting the policy while the UI is accessible.
Once the policy is saved, the environment is ready for the second and final machine account password reset using a supported password length.
Step 5 – Repeat the password reset and service recovery steps
Now that the SSO password policy has been corrected, repeat Step 1 through Step 3.
This time, the generated password should fall within Broadcom’s supported limits, giving the machine account password reset workflow a much better chance of restoring normal service startup.
The important difference now is that this password reset is no longer temporary.
This is the reset that should permanently resolve the Bind Request Failed Error 49 failure loop.
Once the services have been restarted again, validate that all normally running services now return as expected.
Step 6 – Reboot vCenter if services are still missing
If not all normally running services come online after repeating Step 1 through Step 3, reboot the vCenter before moving on to more invasive recovery steps.
At this stage, the password mismatch and unsupported SSO policy should already be corrected, but some services may still fail to register cleanly until the appliance has been restarted.
Reboot the vCenter:
reboot
After the system comes back online, validate the full service state again:
service-control --status
If all expected services are now running, the recovery is complete.
If critical services are still missing after reboot, continue to the final recovery step.
Step 7 – Consider certificate reset as a final fallback
If critical services are still missing after the reboot, you can consider a certificate reset as the final recovery option. This will reregister all endpoint services.
This is not covered in this article, because the password policy correction and repeated machine account password reset should normally resolve the issue.
A certificate reset can have major consequences for the trust relationship with other infrastructure components, including external integrations, backup platforms, monitoring systems, load balancers, and other VMware products that rely on the existing certificate chain.
Because of that, certificate reset should only be considered as a carefully planned final fallback once the password-related recovery steps in this article have been fully exhausted.
Final thoughts
Hopefully this helps if you end up in the same unfortunate recovery scenario.
Be extremely careful with every command you run during this process, especially in environments with linked systems, backups, monitoring integrations, or other components that depend on the existing trust relationships.
The steps above worked in this case, but every environment is different, so make sure you understand the impact before making changes in production.
If this saved you some time, feel free to leave a comment below.