Générer un mot de passe

Générer un mot de passe en shell UNIX

Problématique

Il peut être parfois utile de générer un mot de passe dans un shell sans pour autant installer de programmes spécifiques comme mkpasswd, etc.

Par exemple, dans une application (web ou locale) générer un mot de passe par défaut, pour un utilisateur ou un programme. Un mot de passe efficace.

Solution

Il existe un générateur de données aléatoires :

dd if=/dev/urandom count=1

Remarque

Il existe aussi le pseudo périphérique /dev/urandom pour générer des données aléatoires.

Cette commande va générer 512 octets aléatoires. Mais ce générateur ne s'occupe pas de savoir si les données générées sont accessibles par un clavier et donc utilisables.

Pour améliorer ces données aléatoires et les rendre utilisables, il faut donc les transformer.

dd if=/dev/urandom count=1 | uuencode -m -

par exemple, donnera :

1+0 records in
1+0 records out
512 bytes transferred in 0.000346 secs (1480003 bytes/sec)
begin-base64 644 -
uoTo/5c2cv2lR5WP7FPxuAUS99HKYkcxzjRL8wKpwApdNJXp+ja4gGk1PD/4O1kckv4qO8FpXlhN
ymTIDqAxSLIUfusI1bwcif2lTAIzzgrsC4PA4Be5DfC9Xeg+rKZuXLIFFjPoiOAvgEngADq+/VG+
prb1wdM/hCEgqAQv5vtDoHbESXtwrKkivU5+GNjMcDg/oPOu71ppq6h+ej+CFx4zLa2WlOYhMKP2
SgtxdBo7CxK/87AV7jgiv6TXHc+gedEHFxptsbRcVjAl4zbLstCXqL9DAQm9XDtiu0qI4F0Qsz6Q
YIceRebIFo5VsBdKKsMsm6Cp+QOZ+snhGZXh2iBB2h3iQ7IUbdp/ylbpw6/znHAf7F0S3FZO/5nd
Xrv87S2X/HjJE8JXty8tWCDKU1pOZiy94SeREXgolsNs7yy4cwjFpDrmkLwxskuUwA9LScOJD+XG
6DiuixTaq7Xsw8FciTnSkwIRFMsohmDRYlBRadBA5rTTF/E7KKzNjNNkPA7UOgNM39pOlvR+QacK
c6G4JiQrfJaPhlkc78RzGhGTd+DrtUstPv0dyUVIRSw4UDhcN2eSuSEFzqncGeoXFTDYeaN8PTpy
5Zof72Jq8iAa4Z3b0+h3AtvjwCTf/ueDtnKUX/eCpKolay2dxcTRyhqpVg/iYAqAuT/D7PsbX9A=
====

C'est long, mais plus aisément utilisable. il suffit ensuite d'éliminer les lignes inutiles, de tronquer pour ne prendre que quelques caractères. Par exemple :

dd if=/dev/urandom count=1 | uuencode -m - | head -n 2 | tail -n 1 | cut -c-12

va générer un mot de passe de 12 caractères de long.

Pour supprimer éventuellement , les + et les /, il suffit d'ajouter un sed :

dd if=/dev/urandom count=1 | uuencode -m - | sed 's/+//g' | sed 's/\///g' \
| head -n 2 | tail -n 1 | cut -c-12

ce qui va donner, par exemple :

Y5fCwMPoeyEt

Pour aller plus loin

De la même façon, on peut générer des nombres aléatoires