Bash generar contraseñas – letras y números aleaorios

Estaba simplificando mi auto instalador de ISPCONFIG para que sea más sencillo y más automático de usar y una de las cosas que tiene es la clave de mysql, así que que me a dado por generar la contraseña para que el usuario no tenga que escribirla y he llegado hasta este comando:

Generar claves aleatorias en bash

cat /dev/urandom| tr -dc '0-9a-zA-Z'|head -c 8

La salida:

XiunRWVM

También podemos añadirle simbolos:

cat /dev/urandom| tr -dc '0-9a-zA-Z-@#'|head -c 8

j2q6P#gs

O hacerla más larga

cat /dev/urandom| tr -dc '0-9a-zA-Z@#-'|head -c 22

ofSMeuWYdDVl3zMVMyLSDe

Y tengo que adminitirlo el comando tr es nuevo para mi:

man tr

NAME
tr – translate or delete characters

SYNOPSIS
tr [OPTION]… SET1 [SET2]

DESCRIPTION
Translate, squeeze, and/or delete characters from standard input, writing to standard output.

-c, -C, –complement
use the complement of SET1

-d, –delete
delete characters in SET1, do not translate

-s, –squeeze-repeats
replace each input sequence of a repeated character that is listed in SET1 with a single occurrence of that character

-t, –truncate-set1
first truncate SET1 to length of SET2

–help display this help and exit

–version
output version information and exit

Para mi es más que suficiente, aunque buscando y buscando he encontrado esta web en la que explica varios metodos y hasta una variante del comando que deje más arriba: 10 formas de generar claves en bash

Con uno de los que me quedo que hay en esa web es con este:

randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}

Y con esta otra que las dos son variantes del de arriba:

strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo

Espero les sirvan tanto como a mi 🙂