Script do bash da pergunta do gerador da senha

0

Estou tentando fazer um script bash que irá perguntar o nome do usuário, comida favorita e a data atual e salvá-los nas variáveis food, date e name, uma senha aleatória será então gerada. Quando o usuário esquece a senha, tudo o que precisa fazer é digitar o mesmo nome (userrecovery), comida favorita (foodrecovery) e a data (daterecovery) quando a senha foi gerada e a senha deve ser mostrada. O código que eu uso para gerar uma senha aleatória:

choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
  pass="$({ choose '!@#$%^\&'
   choose '0123456789'
   choose 'abcdefghijklmnopqrstuvwxyz'
   choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
      do
         choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      done
  } | sort -R | awk '{printf "%s",$1}')"

Eu tentei algo como:

if [ $food=$foodrecovery -a $date=$daterecovery -a.... ]
   echo $pass

Isso funciona, mas quando eu fecho o script e reabro ele gera uma nova senha que não deveria.

    
por abc123 07.12.2016 / 20:18

1 resposta

1

Toda vez que você executar o script pass será executado. Você deve envolvê-lo em uma função como choose() . Por exemplo:

genpass()
{
 pass="$({ choose '!@#$%^\&'
   choose '0123456789'
   choose 'abcdefghijklmnopqrstuvwxyz'
   choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   for i in $( seq 1 $(( 4 + RANDOM % 8 )) )
      do
         choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      done
  } | sort -R | awk '{printf "%s",$1}')"
  echo "${pass}"
}

Em outra nota:

O uso de $RANDOM deve ser evitado ( Referência ) para senha & geração de chave de criptografia.

O seguinte é mais simples e criptograficamente mais strong;

choose(){ echo "$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)" }
    
por 08.12.2016 / 14:55

Tags