Explorer un Registre Windows depuis Linux

J’ai récemment eu une panne sur un disque dur, celui qui contenait ma partition système pour Windows. Par miracle, ce n’est pas une panne mécanique, et la partition reste lisible depuis un autre PC (via un boitier USB). Il est probable que seul le secteur d’amorçage ait été touché. Toujours est-il que j’ai réinstallé mon Windows sur un nouveau disque (SSD de surcroît, vive la modernité !).

Après avoir réinstallé tous mes logiciels, je me suis rendu compte que j’avais oublié de noter une information cruciale pour me connecter à mes serveurs dédiés : le numéro des ports SSH ! Car bien entendu, je n’utilise pas le port par défaut (parmi d’autres bonnes pratiques de l’administration système). J’avais deux options. Soit essayer régulièrement un nouveau port jusqu’à trouver le bon (il n’y a que quelques dizaines de milliers de choix possibles – en sachant en plus que j’ai fail_2_ban et autres joyeusetés d’installées sur ma machine, je ne peux pas scanner les ports trop violemment). Soit prier pour retrouver l’information dans les fichiers de configuration de PuTTY, mon client SSH.

Il se trouve que PuTTY ne stocke rien dans des fichiers de configuration, mais tout dans le registre de Windows. Plus exactement, dans le registre HKEY_CURRENT_USER/Software/SimonTatham. Sous Windows, vous n’avez pas accès à la partition système (question de permissions). Mais cette contrainte n’existe pas sous Linux. J’ai donc connecté le disque à mon PC, qui tourne sous Ubuntu, et j’ai installé chntpw.

sudo apt-get install -y chntpw

Ensuite, il a fallu que je me rende dans le répertoire qui contient le bon registre.
Certains registres sont contenus dans le dossier Windows (cd /chemin-de-la-partition/WINDOWS/System32/config). Mais dans mon cas, c’est dans le dossier utilisateur qu’il faut regarder (cd /chemin-de-la-partition/Users/Vincent). Le tableau ci-dessous récapitule un peu tout ça.

Nom du registre Fichier à éditer Emplacement
HKEY_CURRENT_USER NTUSER.dat C:/Users/
HKEY_LOCAL_MACHINE\SAM   SAM C:/WINDOWS/system32/config
HKEY_LOCAL_MACHINE\SECURITY   SECURITY C:/WINDOWS/system32/config
HKEY_LOCAL_MACHINE\SOFTWARE   SOFTWARE C:/WINDOWS/system32/config
HKEY_LOCAL_MACHINE\SYSTEM   SYSTEM C:/WINDOWS/system32/config
HKEY_USERS\DEFAULT DEFAULT C:/WINDOWS/system32/config

Le reste, je vous le mets en shell.
Mais en gros, vous lancez chntpw en mode éditeur de registre, puis vous naviguez jusqu’à la clé qui vous intéresse. A noter que je cherchais une seule information, je n’ai pas testé d’export d’une clé.

sudo chntpw -e NTUSER.data

# Là, on entre dans un client interactif pour naviguer dans le registre.
# Vous pouvez taper ?, suivi de la touche Entrée, pour avoir de l'aide.
cd Software
cd SimonTatham
cd PuTTY
cd Sessions
ls

Et là, toutes les clés disponibles à ce niveau sont affichées.
La valeur qui m’intéressait était portNumber. Après, un petit Ctrl + C ou la lettre ‘q’ pour fermer, et tout est bon. On peut déconnecter proprement le disque.

Dans mon cas, ce n’était que de la récupération d’information, mais ce petit programme peut aussi être utilisé pour réinitialiser des mots de passe ou changer des valeurs dans la base de registre. En complément, je vous recommande cet article, qui m’a aidé à identifier le bon registre.

Publicités

Compiler un Module Maven avec une Copie de Dépôt Local

Cet article concerne Maven 3. Imaginons le cas où l’on vous fournit les sources d’un module Maven à compiler, avec une copie d’un dépôt local. C’est un cas que l’on rencontre parfois quand on fait du support.

La première chose est de mettre à jour votre fichier ~/.m2/settings.xml pour indiquer l’emplacement de votre nouveau dépôt local (celui que l’on vous aura fourni).

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">

      <localRepository>/home/vzurczak/Bureau/bug_jaspersoft/repository</localRepository>
</settings>

Ensuite, si vous tentez de compiler votre projet en l’état, vous risquez de rencontrer une erreur. Dans notre cas, c’était du genre…

Non-resolvable parent POM for…

… alors que le projet en question était bien dans le dépôt fourni.
Même avec l’option -o (pour offline / hors-ligne), cette erreur continuait d’apparaître. Finalement, il a fallu utiliser l’option -llr.

Exemple : mvn clean install -llr

Ainsi, le dépôt local est utilisé.
Cette option est une abréviation pour –legacy-local-repository. La documentation précise…

Use Maven 2 Legacy Local Repository behaviour, ie no use of _remote.repositories. Can also be activated by using -Dmaven.legacyLocalRepo=true