Password
Il y a quelques mois, j'avais présenté une technique pour générer des mots de passe aléatoires sous Linux. Celle-ci présentait un inconvénient : elle était basée sur expect et possédait un script spécial nommé mkpasswd. Voici donc une nouvelle méthode, sans aucune dépendance, qui utilise /dev/urandom pour générer des mots de passe à la volée sous Linux.

Voici un exemple d'utilisation :

< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8

Quelques explications sur le fonctionnement de cette commande :

  • /dev/urandom : c'est l'interface avec le générateur de nombres aléatoires du noyau Linux
  • tr -dc _A-Z-a-z-0-9 : indique les caractères à utiliser pour créer le mot de passe. Ici on utilise tous les caractères de l'alphabet (minuscule et majuscule) plus les chiffres.
  • head -c8 : permet d'ajuster la longueur du mot de passe. Ici il fera 8 caractères.

Si l'on souhaite avoir un retour chariot en fin de ligne, on pourra simplement utiliser echo :

echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8`


8 Commentaires pour "Générer des mots de passe aléatoires sous Linux"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Une petite erreur c'est glissée je pense. Ca ne serai pas plutôt :

    cat /dev/urandom | tr -dc _A-Za-z0-9 | head -c8

    echo `cat /dev/urandom | tr -dc _A-Za-z0-9 | head -c8`

    On peu aussi utiliser _[:alnum:]

    layer973 , le 2 mars 2009 à 10:53
  •  

    Et pourquoi ne pas utiliser pwgen ?

    Anonyme , le 2 mars 2009 à 11:38
  •  

    @layer973 : essaye la commande, tu verras qu'il n'y a pas besoin de cat.

    @Anonymous : je ne connaissais pas pwgen. Ce programme semble également intéressant.

    pti-seb , le 2 mars 2009 à 12:17
  •  

    @layer973 : ne pas oublier le "<" en début de commande.

    Edouard , le 2 mars 2009 à 12:44
  •  

    @pti-seb, Edouard
    Mea culpa. Je n'avais en effet pas vu le < en début de ligne. Par contre je pense toujours qu'il n'y pas besoin des - entre a-Z A-Z et 0-9 sauf si on veut du caractère dans le mot de passe et auquel cas, pas besoin de le répéter (ou alors j'ai encore loupé un truc?).

    @Anonyme : pwgen n'est pas installé par défaut chez moi. On pourrait considérer ça comme une dépendance. L'article si j'ai bien compris vise le fonctionnement "out of the box".

    layer973 , le 2 mars 2009 à 21:59
  •  

    Ou alors la commande makepasswd qui fait la même chose ...

    "makepasswd generates true random passwords by using the /dev/random feature of Linux, with the emphasis on security over pronounceability. It can also encrypt plaintext passwords given on the command line"

    DjinnS , le 6 mars 2009 à 19:30
  •  

    J'ai amélioré le script: http://pastebin.com/m2d87a781
    case $# in
    0)
    echo "Combien de mots de passe souhaitez vous generer?"
    read nbResultat
    echo "Quelle taille auront ces mots de passe?"
    read taille
    for((i=0; i<${nbResultat}; i++));
    do echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${taille}`;
    done
    ;;
    1)
    echo "Nombre de parametres insufisant"
    echo -e "cmd 33[4mtaille du mdp33[0m 33[4mnombre de resultats33[0m"
    ;;
    2)
    #Teste si les paramètres sont positifs
    if test "$1" -gt "0" && test "$2" -gt "0"
    then
    #Affiche un avertissement si la taille du mot de passe est trop grande, pour eviter d'avoir un script qui met 100 ans à s'executer.
    if test "$1" -gt "100"
    then
    echo "Voulez vous vraiment afficher des mots de passe de $1 caracteres? o/n"
    read reponse

    if [ "$reponse" = "o" ]
    then
    if test "$2" -lt "100"
    then
    for((i=0; i<$2; i++));
    do echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c$1`;
    done
    else
    echo "Voulez vous vraiment afficher $2 mots de passe differents? Ceci risque de prendre un moment o/n"
    read reponse
    if [ "$reponse" = "o" ]
    then
    for((i=0; i<$2; i++));
    do echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c$1`;
    done
    else
    echo "Fin du script"
    fi
    fi
    else
    echo "Fin du script"
    fi
    else
    if test "$2" -lt "100"
    then
    for((i=0; i<$2; i++));
    do echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c$1`;
    done
    else
    echo "Voulez vous vraiment afficher $2 mots de passe differents? Ceci risque de prendre un moment o/n"
    read reponse
    if [ "$reponse" = "o" ]
    then
    for((i=0; i<$2; i++));
    do echo `< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c$1`;
    done
    else
    echo "Fin du script"
    fi
    fi

    fi
    else
    echo "Les parametres doivent etre des entiers positifs"
    fi
    ;;
    *)
    echo "Trop de paramètres."
    ;;
    esac

    matt050 , le 24 mars 2009 à 01:23
  •  

    Bonjour,

    Très intéressant ce script.
    J'ai voulu rajouter des caractères spéciaux.

    J'ai d'abord tenté ça :
    echo `< /dev/urandom tr -dc _A-Za-z0-9-\!\$\#\&@* | head -c12`

    Ce qui place en général 1 caractère spécial, voir 0 et au maximum 3 et uniquement ceux contenus dans ma liste.

    Par hasard, j'ai tenté cela :
    echo `< /dev/urandom tr -dc \!$\#\&-A-Za-z | head -c12`

    Et là, j'ai des ( des + des , etc...

    Alors je ne comprends pas bien ma commande mais je suis satisfait de ce qu'elle produit en tout cas.

    vm76 , le 21 novembre 2013 à 11:43

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité redhat red hat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum