Script para generar claves [Bash]

freishner

Capo
Se incorporó
16 Noviembre 2021
Mensajes
327
Nota: no me pidan que lo cuelgue en un github

Hace rato quería hacerlo, pero me daba lata. Ahora me animé.

En circunstancias reales, lo ideal es usar '[:graph:]' en vez de '[:alnum:]', pero ciertos portales (bancarios) no permiten tener una clave decente :plaf2.

Bash:
# Generador de claves en base a los sets de tr.
# $1: Set a usar. Por defecto [:alnum:].
# $1: Largo de la clave.
# $2: Cantidad de elementos a generar.
function genk {
    # Valor por defecto para $1
    kset=$1
    if [[ -z $1 ]]; then
        kset="[:alnum:]"
    fi
    # Validación de parámetros
    if [[ -z $2 || -z $3 ]]; then
        echo "[Error]: ¡Parámetros incorrectos!"
        echo -e "\nParámetros:"
        echo "1: Set a usar. Por defecto [:alnum:]. Ver man tr."
        echo "2: Largo de la clave"
        echo "3: Cantidad de elementos a generar"
    else
        # Generación de clave alfa-numérica
        i=0
        while (true)
        do
            p=$(< /dev/urandom tr -cd "${kset}" | head -c $2 ; echo);

            # Sets [:alnum:] y [:digit:][:alpha:]
            if [[ $kset == "[:alnum:]" || $kset == "[:digit:][:alpha:]" || $kset == "[:alpha:][:digit:]" ]] ]]; then
                # Solo para claves alfa-numéricas se verifica que contengan números y letras
                if [[ ! -z "${p//[a-zA-Z]}" && ! -z "${p//[0-9]}" ]]; then
                    echo "$i: $p";
                    (( i++ ))
                fi
            # Otros sets de caracteres
            else
                echo "$i: $p";
                (( i++ ))
            fi

            # Terminar la impresión
            if [[ $i -ge $3 ]]; then
                break
            fi
        done
    fi
}

La gracia del script es que se basa en la entropía colectada por el sistema. Mas info acá. Igual lo pueden customizar y agregar sus propias chucherías.

Ejemplo de uso en .bashrc para claves de 20 y 40 caracteres usando el set graph para Gmail (teniendo cargada la función en .bashrc).

Bash:
function genkgr20 { genk "[:graph:]" 20 10; }
function genkgr40 { genk "[:graph:]" 40 10; }

1715042426722.png


1715042449496.png


Otro ejemplo para un portal bancario que acepta claves alfa-numéricas de 8 caracteres.

Bash:
function genkbank { genk "" 8 20; }

1715042398431.png


pd: No memorizo ninguna clave, porque para eso está el gestor de contraseñas.
pd2: si no saben bash, lean el libro adjunto.
 

Archivo adjunto

  • el shell bash.pdf
    1,1 MB · Visitas: 48
Subir