[BASH] Script pour générer des mots de passe

Voici un petit script fait pour ceux qui doivent maintenir des serveurs et créer des mots de passe rapidement :

#!/bin/bash
# random password generator

# Sets the maximum size of the password the script will generate
MAXSIZE=40  # <<——- You can change value

array1=(‘a’ ‘b’ ‘c’ ‘d’ ‘e’ ‘f’ ‘g’ ‘h’ ‘i’ ‘j’ ‘k’ ‘l’ ‘m’ ‘n’ ‘o’ ‘p’ ‘q’ ‘r’ ‘s’ ‘t’ ‘u’ ‘v’ ‘w’ ‘x’ ‘y’ ‘z’ ‘0’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘7’ ‘8’ ‘9’ ‘0’ ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ ‘G’ ‘H’ ‘I’ ‘J’ ‘K’ ‘L’ ‘M’ ‘N’ ‘O’ ‘P’ ‘Q’ ‘R’ ‘S’ ‘T’ ‘U’ ‘V’ ‘W’ ‘X’ ‘Y’ ‘Z’ ‘!’ ‘£’ ‘$’ ‘%’ ‘&’ ‘=’ ‘.’ ‘,’ ‘;’ ‘:’ ‘-‘ ‘_’)

# Used in conjunction with modulus to keep random numbers in range of the array size
MODNUM=${#array1[*]}

# Keeps track of the number characters in the password we have generated
pwd_len=0

# Bash’s command substitution syntax to store the results of the tput command
term_clear=$(tput clear)

# Stores the number of lines or rows on the terminal display
max_lines=$(tput lines)

# Stores the number of columns on the terminal display
max_cols=$(tput cols)

# Finds the appropriate spot to indent for horizontally centered output
indent=$(( ((max_cols / 2)) – ((MAXSIZE / 2)) ))

# Finds the vertical center of the terminal.
line_num=$(( max_lines / 2 ))

# Clear the screen
echo $term_clear

# The outer while loop starts at 0 and loops till MAXSIZE, creating a passwd char each iteration.
# The shells $RANDOM variable creates a semi-random unsigned number. This is our entropy. =x
# x simply holds some random unsigned int that will be used to make the character scramble.
# 500 was choosen for speed and nothing else. Leave out the mod 500 if you want or change it.
# The inner loop displays the password characters. Tput keeps the cursor in the proper position.
# Mod MODNUM keeps the random number inside the size of the array so it doesnt over index.
while [ $pwd_len -lt $MAXSIZE ]
do
x=$(($RANDOM%500))
y=0
while [ $y -lt $x ]
do
((y++))
index=$(($RANDOM%$MODNUM))
tput cup $line_num $(( indent + pwd_len ))
echo -n « ${array1[$index]} »
done
((pwd_len++))
done

# Place the cursor at the bottom of the screen –where is usually at.
tput cup $max_lines 0

exit 0

En espérant qu’il serve 🙂

SckyzO

Je m'appelle Thomas, j'ai 26 ans, je suis un passionné des nouvelles technologies. Je suis ingénieur sytème spécialisé dans l'Open Source. Webdesigner à mes heures perdues, développeur, geek invétéré, je tiens ce blog pour permettre à mes lecteurs de suivre l'actualité sur les Logiciels Libres. Je suis investis dans plusieurs projets libres tel que Planet-Libre.org et d'autres projets libres. N'hésitez pas a me contacter si vous souhaitez que j'écrive des articles sur des thèmes particuliers :-)

  • Wow! Et pourquoi pas un truc du genre:

    apg -a 1 -m 8 -M NCL -n 1 -c /dev/urandom

    Voir les paramètres d’apg pour toutes les possibilités.

  • N.

    Tu connais pas pwgen?

    • non je ne connaissais pas, mais ce script permet l’affichage d’un mdp de façon … travaillée 🙂

  • Pas simple de récupérer le script avec les guillemets et quotes qui ne passent pas avec le copier/coller.

    J’ai simplifié la déclaration du tableau :

    array1=( $(echo {a..z} {A..Z} `seq 1 9` « ! £ $ % & = . , ; : – _ ») )

    Sinon pour récupérer le script avec les bons caractères (remplacer les KKK de blocKKKquote pas un seul k minuscule) :

    curl -s http://blog.sckyzo.com/bash-script-pour-generer-des-mots-de-passe/ | sed -e ‘//,//!d’ -e ‘s/]*>//g’ -e ‘/^indent/ s/–/-/’ -e ‘s/(^echo -n).*/1 « ${array1[$index]} »/’ -e ‘/^MAXSIZE/ s/.*/MAXSIZE=40/’ -e « s/&#821.;/’/ » -e ‘s/(^array1=).*/1( $(echo {a..z} {A..Z} `seq 1 9` « ! £ $ % & = . , ; : – _ ») )/’ > random_passwd.sh && chmod +x random_passwd.sh

    D’accord avec les autres commentaires, à part pour le scripting bash l’intérêt de ce script est vraiment des moindres.

  • Bonjour,
    Je me suis aussi fait un petit outil pour générer des password.
    Celui-ci est accesible via HTML : http://projets.armetiz.info/password/

    • cool. C’est libre ton scirpt html ?

  • G-rom

    Il y a déjà une commande sous linux pour générer des mots de passe 😉

  • J’ai une solution radicale pour générer un mot de passe aléatoire sous Linux.
    J’ouvre Vim et je demande à mon amie de le quitter.

    • Fifou

      🙂

    • Excellent. Tu sais quoi … Je vais le tester pour de vrai 😀

  • Don Diego de la Vega

    Perso je ferais un truc a base de ca:
    head /dev/urandom |openssl base64 |cut -c1-8

    et des grep pour avoir des caractère spéciaux

  • B.

    Sympa le script pour le fun, mais sinon j’utilise une commande du genre :

    « pwgen -sync 50 10 »

    Permet de générer 10 mot de passe de 50 char de long avec : minuscules, majuscules, chiffres, et char. spec. (minimum 1 de chaque) 😉