lid's stuff

Générer des mots de passe avec sed et /dev/urandom

S'il y a quelque chose d'essentiel de nos jours, c'est bien d'avoir des mots de passe dits "forts", lorsqu'on ne peut pas utiliser de clefs asymétriques, par exemple sur son blog, son webmail, etc.

Mais, c'est souvent difficile de trouver un mot de passe costaud "comme ça", de tête. Et assez souvent les gens finissent par utiliser des variantes du même mot de passe partout, ou pire, le même mot de passe partout.

Heureusement, sous GNU/Linux, on peut facilement générer un mot de passe en utilisant nos potes /dev/urandom et sed, et je remercie KheOps de m'avoir montré ce tip' ;)

Exemple

Attention les yeux, le one-liner suivant nous permet de générer un mot de passe de 16 caractères:

LC_ALL=C sed -e 's/[^[:print:]]//g; s/\x27//g; /^.\{16\}$/!d; q' /dev/urandom

Ça pique, hein?

Explications

  • LC_ALL=C nous permet de ne renvoyer que des caractères ANSI C.
  • sed -e: utiliser sed en mode script
  • s/[^[:print:]]//g;: n'afficher que les caractères "imprimables"
  • s/\x27//g;: Permet de supprimer les apostrophes (notamment pour pouvoir scripter ensuite la génération de mots de passe sans risquer d'effets de bord suite à la génération d'un "'" qui changerait le sens de la commande à laquelle on passe le résultat de la génération du mot de passe
  • /^.\{16\}$/!d; q: affiche nous les 16 premiers caractères générés sur la sortie standard, et quitte sed.

Et ils ont quelle tête les mdp?

Celle là:

kadath :: ~ » LC_ALL=C sed -e 's/[^[:print:]]//g; s/\x27//g; /^.\{128\}$/!d; q' /dev/urandom | sed -e 's/.\{16\}/&\n/g'
x1h\n<g9;hSG38Lm
t]>pH;E[~<+bV"NN
I35?#gA;\d<!p{s5
=Es/m<P<l+70RT#i
~h:%N$U$KiA>=h.k
6felT<bFfQSL%N?q
uCP,~_%BW<I~DXTE
t6"_PT.:g@fj+P7b

Petit bonus: en fait je génère un mot de passe de 128 caractères, que je découpe ensuite en 8 mots de passe de 16 caractères (la seconde commande après le pipe | - on peut aussi se passer du pipe et le faire en un seul script sed, mais c'était plus pour vous montrer. Sed, c'est vraiment très, très puissant :)


Tagged under: sysadmin, linux, UNIX