Depuis la version 7.0 de la mise à jour U2, la manière dont certaines parties de la configuration liée à ESXi sont stockées a changé. L’un de ces changements concerne le mot de passe des utilisateurs ESXi.
VMware (et plus récemment Broadcom) affirme officiellement qu’il n’est pas possible de réinitialiser le mot de passe du logiciel ESXi et que si l’administrateur oublie son mot de passe, il devra réinstaller (sauf si vous avez déjà relié votre ESXi à un vCenter et pouvez utiliser le profil d’hôte).
Aujourd’hui, nous vous fournissons la nouvelle version de la méthode (qui a été testée jusqu’à la version 9 dans notre environnement de test).
1. Démarrez votre serveur avec une ISO version 7.0U2 ou supérieure. (De préférence, utilisez la même version installée sur votre serveur)
2. Après que l’ESXi a démarré sur votre disque d’installation et que l’installateur s’affiche, appuyez sur Alt+F1 pour entrer dans le DCUI et à partir de là, ouvrez le shell avec l’utilisateur root sans mot de passe.
Si vous n’êtes pas à l’aise avec le travail via DCUI (par exemple, parce que vous ne pouvez pas copier/coller), vous pouvez démarrer le service SSH et vous y connecter.
Tout d’abord, assurez-vous que votre adresse IP est configurée d’une manière ou d’une autre. Par défaut, si vous avez un DHCPv4, ESXi obtiendra une adresse IPv4. En IPv6 avec SLAAC et en utilisant la méthode EUI64, une adresse vous sera attribuée, que vous pouvez voir de cette façon :
1 2
| localcli network ip interface ipv4 address list
localcli network ip interface ipv6 address list |
Si ces méthodes ne fonctionnent pas et que vous préférez utiliser une adresse IP statique, vous pouvez procéder ainsi :
1 2
| localcli network ip interface ipv4 set --interface-name vmk0 --ipv4 VOTRE_ADRESSE_IPV4 --netmask VOTRE_MASQUE --type static
localcli network ip interface ipv6 address add --interface-name vmk0 --ipv6 VOTRE_ADRESSE_IPV6/PREFIX |
Comme vous pouvez le constater, une adresse IP est appliquée sur l’interface VMK0.
Avant d’activer SSH, assurez-vous d’avoir défini un mot de passe acceptable pour l’utilisateur root. Pour ce faire, utilisez la commande suivante :
Si vous activez le service SSH sans définir de mot de passe, vous pourrez vous connecter à ESXi en tant que root sans mot de passe, ce qui est évidemment très dangereux d’un point de vue sécurité, surtout si vous utilisez une adresse IP publique.
Enfin, utilisez la commande suivante pour activer SSH :
Cela exécutera le serveur SSH sur le port 22/tcp.
3. Il existe 4 types de disques différents que vous pouvez voir de cette manière :
5. Les partitions qui nous intéressent portent les étiquettes BOOTBANK1 et BOOTBANK2 et sont de type FAT. Si vous n’avez jamais mis à jour votre ESXi, le BOOTBANK2 sera vide, mais si vous avez effectué une mise à jour, ESXi alternera la partition de démarrage à chaque mise à jour réussie. Nous n’allons pas entrer dans les détails des bootbanks, et à partir de maintenant, nous supposerons que votre ESXi démarre depuis BOOTBANK1.
Si vous souhaitez être 100 % certain, laissez votre ESXi original commencer à démarrer et appuyez sur Shift+O pendant les 5 secondes d’attente du bootloader, puis notez la valeur bootUUID affichée en bas de l’écran. Enfin, après avoir redémarré le serveur avec l’ISO, utilisez cette commande :
localcli storage filesystem list
6. Les paramètres d’ESXi, y compris les mots de passe des utilisateurs, sont stockés dans le fichier state.tgz. Pour les nouvelles versions d’ESXi, si vous extrayez ce fichier, vous trouverez deux fichiers : encryption.info et local.tgz.ve.
Utilisez ces commandes :
1 2 3 4
| mkdir /tmp/hmecode
cd /tmp/hmecode
cp /vmfs/volumes/BOOTBANK1/state.tgz .
tar x -z -f state.tgz |
Dans les anciennes versions d’ESXi, le fichier était local.tgz.
⚠️ Remarque : Comme le système de fichiers des bootbanks est en FAT, si vous effectuez l’extraction directement là-bas, vous perdrez les permissions des fichiers. C’est pourquoi l’opération est faite dans /tmp.
Le fichier local.tgz.ve est un fichier de type enveloppe utilisé par VMware pour appliquer un chiffrement. Vous ne pourrez donc plus l’extraire et voir/modifier son contenu comme auparavant.
Le fichier encryption.info est un fichier texte clair dont le contenu dépend du mode de chiffrement choisi. (Actuellement, cela peut être NONE ou TPM).
Si votre matériel le permet et que vous souhaitez passer de NONE à TPM (plus sécurisé), vous pouvez utiliser l’une de ces commandes après avoir réinitialisé votre mot de passe et vous être connecté à ESXi :
1 2
| localcli system settings encryption set --mode TPM
esxcli system settings encryption set --mode TPM |
La méthode partagée ici vous permet de réinitialiser votre mot de passe dans les deux modes (NONE et TPM).
7. À l’étape suivante, vous allez déchiffrer le fichier local.tgz.ve.
crypto-util envelope extract --aad ESXConfiguration local.tgz.ve local.tgz
8. Extrayez le fichier local.tgz
1 2 3
| mkdir local
tar x -z -f local.tgz -C local
cd local |
Si vous regardez attentivement, vous verrez que cette archive n’inclut plus les fichiers suivants comme auparavant :
etc/passwd
etc/shadow
En effet, VMware ne stocke plus le mot de passe dans ces fichiers mais l’a déplacé dans une base sqlite à l’adresse suivante :
var/lib/vmware/configstore/backup/current-store-1
Vous pouvez visualiser le mot de passe sauvegardé des utilisateurs avec cette commande :
1 2 3
| /usr/lib/vmware/sqlite/bin/sqlite3 var/lib/vmware/configstore/backup/current-store-1 \
"SELECT * FROM Config WHERE Component='esx' AND ConfigGroup='authentication' \
AND Name='user_accounts' AND Identifier='root'" |
10. Créez un fichier avec le contenu suivant :
UPDATE Config SET UserValue='{"name":"root","password_hash":"$6$OuBJHTuaUlOIkE/k$p2fCVL5q5kniGsWYo1xU4Tzct0ZJ7hFQeJH2z9c5F/srN2hQkBKf/lTepTZHwJqRim48vNJ9Meky3E5S0amnL0","description":"Administrator"}' WHERE Component='esx' AND ConfigGroup='authentication' AND Name='user_accounts' AND Identifier='root'
Enregistrez-le à l’adresse suivante :
vi /tmp/hmecode/reset-password.sql
⚠️ Si vous ne savez pas utiliser vi, vous pouvez créer le fichier dans votre éditeur de texte préféré (sur votre système) puis le transférer dans votre ESXi avec SFTP (par ex. FileZilla ou WinSCP).
11. Exécutez la requête avec sqlite :
/usr/lib/vmware/sqlite/bin/sqlite3 var/lib/vmware/configstore/backup/current-store-1 </tmp/hmecode/reset-password.sql
Cela mettra à jour le hash dans la base. Vous pouvez vérifier le changement avec la commande de l’étape 9.
👉 Le hash fourni correspond au mot de passe pa$$w0rd.
12. Ré-archivez les fichiers pour obtenir un nouveau local.tgz :
tar c -z -f /tmp/hmecode/local-new.tgz tar t -z -f /tmp/hmecode/local.tgz
Puis chiffrez à nouveau le fichier avec la clé :
1 2 3 4
| cd /tmp/hmecode/
key_id=crypto-util keys getkidbyname ConfigEncryptionKey
mv local.tgz.ve local-old.tgz.ve
crypto-util envelope insert --aad ESXConfiguration --id ${key_id} local-new.tgz local.tgz.ve |
14. Créez un nouveau fichier state.tgz :
1 2
| mv state.tgz state-old.tgz
tar c -z -f state.tgz local.tgz.ve encryption.info |
15. Transférez le fichier dans le bootbank et remplacez l’existant :
1 2 3
| cd /vmfs/volumes/BOOTBANK1
mv state.tgz state.tgz.bak
mv /tmp/hmecode/state.tgz . |
👉 Une sauvegarde a été faite pour conserver l’original.
Vous pouvez maintenant redémarrer votre serveur et vous connecter avec l’utilisateur root et le mot de passe pa$$w0rd.
✅ Résumé rapide (TL;DR) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| mkdir /tmp/hmecode
cd /tmp/hmecode
cp /vmfs/volumes/BOOTBANK1/state.tgz .
tar x -z -f state.tgz
localcli --plugin-dir=/usr/lib/vmware/esxcli/int system settings encryption stop
localcli --plugin-dir=/usr/lib/vmware/esxcli/int system settings encryption setup -c encryption.info
localcli --plugin-dir=/usr/lib/vmware/esxcli/int system settings encryption start
crypto-util envelope extract --aad ESXConfiguration local.tgz.ve local.tgz
mkdir local
tar x -z -f local.tgz -C local
cd local
/usr/lib/vmware/sqlite/bin/sqlite3 var/lib/vmware/configstore/backup/current-store-1 "UPDATE Config SET UserValue='{"name":"root","password_hash":"$6$OuBJHTuaUlOIkE/k$p2fCVL5q5kniGsWYo1xU4Tzct0ZJ7hFQeJH2z9c5F/srN2hQkBKf/lTepTZHwJqRim48vNJ9Meky3E5S0amnL0","description":"Administrator"}' WHERE Component='esx' AND ConfigGroup='authentication' AND Name='user_accounts' AND Identifier='root'"
tar c -z -f /tmp/hmecode/local-new.tgz tar t -z -f /tmp/hmecode/local.tgz
cd /tmp/hmecode/
key_id=crypto-util keys getkidbyname ConfigEncryptionKey
mv local.tgz.ve local-old.tgz.ve
crypto-util envelope insert --aad ESXConfiguration --id ${key_id} local-new.tgz local.tgz.ve
mv state.tgz state-old.tgz
tar c -z -f state.tgz local.tgz.ve encryption.info
cd /vmfs/volumes/BOOTBANK1
mv state.tgz state.tgz.bak
mv /tmp/hmecode/state.tgz . |
Partager