[Shell] - Générer une chaine aléatoire

Résolu
Phiphi57 Messages postés 789 Date d'inscription   Statut Contributeur Dernière intervention   -  
 faf2019 -
Bonjour a tous,

voila, je souhaite créer des mots de passe pour utilisateurs via md5, et j'aimerai utiliser un "salt" aléatoire.
Pour le moment, j'ai un truc bidouillé du style :
mkpasswd --hash=md5 Mot2PasS `uuidgen | awk 'BEGIN{FS="-"} {print $1}'`  


par contre, uuidgen ne génère pas de majuscule apparemment.
est ce qu'il existe une commande sur une ligne permettant de générer une chaine aléatoire de 8 caractères comprenant a..z,A..Z,0..9 ??
(pour info, uuidgen ne semble utiliser que les chiffres et les minuscules)

Merci d'avance!

Phiphi

12 réponses

  1. faf2019
     
    date +%s | sha256sum | base64 | head -c 8 ; echo

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

    openssl rand -base64 4
    7
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    en shell
    #!/bin/bash
    
    M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    while [ "${n:=1}" -le "8" ]
    do  pass="$pass${M:$(($RANDOM%${#M})):1}"
      let n+=1
    done
    echo "$pass"
    
    lami20j
    5
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Ben te voilà "guru" maintenant ;-))

      Sinon, sous Mndriva le "mkpasswd" installé n'est pas du tout le même que sous Debian, la preuve :
      [jp@MDK tmpfs]$ mkpasswd
      EHbb.93nh
      
      [jp@MDK tmpfs]$ mkpasswd
      s7~bVZ0xu
      
      [jp@MDK tmpfs]$ mkpasswd -l 8 -C 3 -s 0
      BM91hAyg
      
      [jp@MDK tmpfs]$
      Il date de 1994 :
      AUTHOR
             Don Libes, National Institute of Standards and Technology
      
             mkpasswd is in the public domain.  NIST and I would  appreciate  credit
             if this program or parts of it are used.
      
                                      22 August 1994                     MKPASSWD(1)
      et ne gère pas le "--hash=" ni le "salt"...

      ;-\

      Sinon j'ai trouvé ça sur le Net (en Perl) : http://www.ajs.com/~ajs/mkpasswd.html

      :-))
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Salut,

        donc j'avais raison de demander reveiller les Maîtres

        lami20j
        0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
    Le caractère \n est seulement pour affichage.

    Exemples
    $ perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
    stY7q8Is
    $ perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
    DzeO5pmC
    $ perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)]),"\n"'
    lZAdufLs
    
    lami20j
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    et avec mkpasswd
    mkpasswd --hash=md5 `perl -e '@c=("A".."Z","a".."z",0..9);print join("",@c[map{rand @c}(1..8)])'`
    lami20j
    0
  6. Phiphi57 Messages postés 789 Date d'inscription   Statut Contributeur Dernière intervention   295
     
    Salut!

    Merci pour cette réponse rapide!!!
    il me semblait effectivement avoir vu trainer ce truc avec perl (qui est un langage que je ne connaissais pas du tout...)

    deux petites questions subsdidiaires tant que j'y suis :
    1-/ y a t il un équivalent purement "bash"?
    2-/ Question sous-jacente : perl est il installé par défaut sur tout os GNU/Linux? (l'idée étant d'avoir une méthode basique qui fonctionne a coup sûr chez n'importe qui, pour la mettre éventuellement dans un tuto...)

    Sinon, pour mes propres besoins, RAS, ta solution est parfaite!
    Merci encore!

    Phiphi
    0
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,

    y a t il un équivalent purement "bash"?

    Je pense que oui. Mais il faut reveiller les maîtres jipicy, asevere, jisisv, ... ;)

    perl est il installé par défaut sur tout os GNU/Linux?

    Oui. Perl est integré dans tout système GNU/Linux.

    lami20j
    0
  8. Phiphi57 Messages postés 789 Date d'inscription   Statut Contributeur Dernière intervention   295
     
    Merci pour tout, c'est nickel!

    Phiphi
    0
  9. santiago69 Messages postés 485 Statut Membre 209
     
    J'essaye de faire un scripts base sur celui ci.
    L'idee est de permettre la commande suivantes :
    pwgen [length] [-aA0]
      length    la longueur du mot de passe
      -a        utiliser des minuscules
      -A        utiliser des majuscules
      -0        utiliser des chiffres

    Mon code est le suivant :
    #!/bin/bash
    # http://www.commentcamarche.net/forum/affich 2335882 shell generer une chaine aleatoire
    
    syntax="`basename $0` [length] [-aA0]\n  length    password length"
    
    # Read parameters
    while [ $# -gt 0 ]; do
      case "$1" in
        *[0-9])
          [ $l ] && (echo -e $syntax; exit 1)
          l=$1
          ;;
        -[aA0])
          ;;
        *)
          echo -e $syntax; exit 1
          ;;
      esac
      shift
    done
    
    # Set default
    [ $l ] || l=8
    [ $M ] || M="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    
    
    while [ "${n:=1}" -le "$l" ]
    do  pass="$pass${M:$(($RANDOM%${#M})):1}"
      let n+=1
    done
    echo "$pass"

    Les problemes sont les suivants :
    1) Pourquoi mes doubles espaces sont supprimes dans la variable syntax
    2) *[0-9] reconnait les nombres mais aussi 3r5
    Quelle syntaxe utiliser pour capter uniquement les combinaisons de chiffres
    3) [aA0] reconnait a, A et 0 mais pas aA, A0, etc...
    Quelle syntaxe utiliser pour capter toutes les combinaisons possibles de a, A et 0

    Merci d'avoir presente ce bout de code qui me pernet d'en decouvrir toujours plus sur les scripts
    Santiago
    0
  10. santiago69 Messages postés 485 Statut Membre 209
     
    Encore un autre probleme.
    Ligne 10
        [ $l ] && (echo -e $syntax; exit 1)

    En cas d'erreur, la syntaxe est bien affichee mais exit 1 n'est pas respecte. Le programme continue.
    J'ai remplace par
        [ $l ] && echo -e $syntax && exit 1

    Ca marche mais c'est completement par hasard apres moultes tentatives.
    Est ce que quelqu'un connait la syntaxe correcte d'un if then sur une seule ligne ?

    0
  11. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    1. il faut utliser "$syntax"

    2. *[0-9] veut dire n'importe quel caractère n'importe combien des fois suit d'un chiffire
    si tu écrit r5 ça ne marche pas en revanche si tu écrit 3r5 le 1er caractère c'est un chiffre (mais attention pas un entier) donc 3r5 sera afficher

    regarde ici
    http://www.commentcamarche.net/faq/sujet 4605 shell tester une variable numerique#expr

    3. mieux vaux utliser getopts

    voici un test
    lami20j@debian:~$ cat generer_passwd.sh
    #!/bin/bash
    
    syntax="`basename $0` [length] [-aA0]\n  length    password length"
    
    case "$1" in
        *[0-9])
            if let $1 2>/dev/null
            then
              echo $1
            else
              echo -e "$syntax"
            fi
          ;;
        *)
          echo -e "$syntax"; exit 1
          ;;
    esac
    lami20j@debian:~$ sh generer_passwd.sh  355
    355
    lami20j@debian:~$ sh generer_passwd.sh  3
    3
    lami20j@debian:~$ sh generer_passwd.sh  3r
    generer_passwd.sh [length] [-aA0]
      length    password length
    lami20j@debian:~$ sh generer_passwd.sh  3r5
    generer_passwd.sh [length] [-aA0]
      length    password length
    lami20j@debian:~$ sh generer_passwd.sh  rrr
    generer_passwd.sh [length] [-aA0]
      length    password length
    


    0