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. 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
    ## …

    Me gusta

  2. 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

    Me gusta

    1. Chapó Julio… al final te voy a tener que “querer” y todo XD

      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

      Me gusta

      1. 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> ).

        Me gusta

        1. 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.

          Me gusta

        2. 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!

          Me gusta

  3. 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í).

    Me gusta

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. Salir /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .