Generando códigos PIN en Bash aleatoriamente

generador de números aleatorios en bash linux

Tengo un serio problema con la autenticación en dos pasos (2FA) de la Synology NAS DS213j.

Tanto es así que casi nunca funcionan los códigos que le introduzco y me veo obligado a solicitarle que me envíe un correo con una clave para poder entrar.

Como los humanos tendemos (casi sin darnos cuenta) a seguir patrones, me he buscado la forma de generar números de 8 dígitos y evitarme tener que pensar números pseudoaleatorios 😉

Por fortuna en Linux contamos con el comando shuf instalado de serie por lo que sería suficiente con un

shuf -i 10000000-99999999 -n 15

donde:

  • -i 10000000-99999999 es para que genere un número de 8 dígitos (pongo 10000000 para que los números no empiecen por 0 lo que provocaría que tuviese 7 dígitos al no imprimir el 0 inicial)
  • -n 15 es para que genere 15 números

Sirva como ejemplo de salida la siguiente captura de pantalla

ejemplo de cómo generar secuencias de números aleatorios

Conclusión

Forma sencilla de generar secuencias de dígitos aleatorios en Linux con la longitud deseada.

Y tú…

  • ¿Conocías shuf?
  • ¿Qué método usas para generar números aleatorios en Bash?
  • ¿Tienes problemas con la 2FA en tu NAS? 😉

10 comentarios en “Generando códigos PIN en Bash aleatoriamente

  1. Julio dijo:

    Muy bueno, a mí me ha bastado usar $RANDOM, cuando he necesitado obtener algún número aleatorio, por ejemplo

    ## creamos un fichero de log para almacena lo que vayamos escribiendo y verlo en el correo
    Aleatorio=`echo $(($RANDOM))`
    echo “Creamos el fichero de log.” >> /tmp/log$Aleatorio.txt
    ## …

  2. Julio dijo:

    Hola de nuevo, otra opción sería usar este conjunto de comandos

    cat /dev/urandom| tr -dc ‘0-9’ | fold -w 8| head -15

    Con esto obtendría 15 cadenas de 8 dígitos, aunque claro según está el primer dígito puede ser un cero.

    Lo bueno es que cambiando tr -dc ‘0-9’, por otro patrón puedes tener letras, guiones u otros símbolos, así no te limitas a números

    Por ejemplo
    cat /dev/urandom| tr -dc ‘A-Za-z0-9_*@#’ | fold -w 8| head -15

    • Chapó Julio… al final te voy a tener que “querer” y todo 😄

      Funciona muy bien pero… ¿en serio hay que aprenderse toda la línea de memoria? 😛

      Me llama la atención la aparición de caracteres extraños (¿problemas de encoding?) al lanzarlo en mi equipo… tendré que investigar qué está ocurriendo

      • Swicher dijo:

        Me pasaba lo mismo cuando probé ese comando, luego de revisarlo un poco descubrí que hay que cambiar las comillas para que funcione correctamente (para evitar este tipo de problemas lo mejor es poner los comandos dentro del tag <code></code> ).

        • Julio dijo:

          Pongo ahora el ejemplo con estas etiquetas code a ver si al copiar y pegar funciona bien.

          cat /dev/urandom| tr -dc '0-9' | fold -w 8| head -15

          cat /dev/urandom| tr -dc 'A-Za-z0-9_*@#' | fold -w 8| head -15

          A ver si no se me olvida la próxima vez que adjunte algo.

          Lo bueno de este comando es que te obliga a memorizar, al igual que cuando aprendes en este entorno, cosa que viene muy bien porque generalmente hacemos siempre lo contrario, a repetir como loros sin saber lo que decimos o queremos decir.

          Un saludo.

        • Funciona espectacularmente bien, Julio.

          Respecto a la memoria…uufff, lo llevo fatal aunque no soy de repetir cual “loro” 😉

          Otro detalle: funciona hasta poniendo ceros por la izquierda para conseguir la longitud deseada del “pin” ¡Enhorabuena!

  3. Swicher dijo:

    He usado shuf un par de veces, aunque a los números los pregeneraba usando expansión de llaves (no sabia que shuf los podía generar por su cuenta, algo que me sera muy útil si llego a necesitar números muy grandes) y también lo he usado para elegir lineas al azar de un archivo (como listas con tareas pendientes y cosas así).

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s