Como criar uma senha complexa aleatória no SuSe 12

Como criar uma senha complexa aleatória no SuSe 12

Preciso de uma maneira de gerar uma senha aleatória seguindo estes requisitos:

  • Senha com pelo menos 9 caracteres
  • pelo menos 2 letras maiúsculas
  • pelo menos 2 letras minúsculas
  • pelo menos 2 dígitos
  • pelo menos 2 caracteres especiais
  • deve começar com uma letra

este é o comando que eu tenho:

{ shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; } | shuf | tr -d $'\n'

mas está faltando os caracteres especiais

O sistema operacional é SuSE 12

Responder1

Você pode adicionar caracteres especiais com outro shuf, mas não pode usar expansão de chaves e intervalos como esse.

Mas você poderia listá-los explicitamente, um por um, entre aspas para protegê-los do shell:

shuf -r -n2 -e '!' '"' '#' '$' % '&' '(' ')' '*' + , - . / : ';' '<' = '>' '?' @ '[' '\' ']' '^' _ '{' '|' '}'

Ou coloque-os em uma string e use a divisão de palavras para colocá-los em vários argumentos. É necessário desabilitar o globbing com set -f, caso contrário o asterisco causará problemas:

set -f
shuf -r -n2 -e $(sed -e 's/./& /g' <<< '!"#$%&()*+,-./:;<=>?@[\]^_{|}' )

(ou apenas faça o que todo mundo faz e adicione dois caracteres especiais fixos no final de uma senha que de outra forma seria sensata e longa o suficiente, mesmo sem eles.)


Para garantir que você tenha uma letra como primeiro caractere, é mais fácil apenas adicionar uma separadamente e embaralhar os caracteres apenas do restante da senha. Por exemplo, isso criaria a senha em duas partes, sendo a primeira uma única letra (maiúscula ou minúscula), a segunda é o que você tinha nos comentários:

#!/bin/bash

set -f
pw=$(shuf -r -n1 -e {A..Z} {a..z})
pw="$pw$( { shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; shuf -r -n2 -e $(sed -e 's/./& /g' <<< '@%+\/!#$^?:.(){}[]-_.'); } | shuf | tr -d '\n' )"
echo "$pw"

A saída seria algo assim:

$ bash pw.sh 
WRgpJ7pP%Tj60.1
$ bash pw.sh 
oV6N#7s4Po3Bt)r

Responder2

Dê uma olhadaComo gerar uma string aleatória?

Herbert propõe usar/dev/urandom

tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 13  ; echo

400 a Cat oferece solução comopenssl

openssl rand -base64 12

O problema é que nenhuma dessas soluções garante que você terá todos os caracteres (ou seja, 2 dígitos, 2 caracteres especiais etc.) que deseja.

Com shufe com base no seu código original, você pode fazer algo como

shuf -r -n1 -e {a..z} {A..Z} | tr -d $'\n'; { shuf -r -n2 -e {0..9}; shuf -r -n2 -e {a..z}; shuf -r -n2 -e {A..Z}; shuf -r -n2 -e { \! \" \# $ % \& '\' '/' \( \) \{ \} [ ] \< \> + - = . , : \; ? @ \| \` \~ ^ _ "'" \* }; } | shuf | tr -d $'\n'

Dividido em linhas para facilitar a leitura:

shuf -r -n1 -e {a..z} {A..Z} | tr -d $'\n'; 
{ shuf -r -n2 -e {0..9}; 
shuf -r -n2 -e {a..z}; 
shuf -r -n2 -e {A..Z}; 
shuf -r -n2 -e { \! \" \# $ % \& '\' '/' \( \) \{ \} [ ] \< \> + - = . , : \; ? @ \| \` \~ ^ _ "'" \* }; } | shuf | tr -d $'\n'

O que produzirá uma string começando com uma letra (observe que não estou canalizando a primeira linha para last shuf) e terá 2 letras minúsculas, 2 letras maiúsculas e 2 dígitos (um total de 9 caracteres)

Responder3

No final, este é o comando final:

export PASSWORD=$(shuf -r -n1 -e {A..Z} {a..z})$( { shuf -r -n4 -e {A..Z}; shuf -r -n4 -e {a..z}; shuf -r -n4 -e {0..9}; shuf -r -n2 -e $(sed -e 's/./& /g' <<< '@%+\/!#$^?:.(){}[]-_.'); } | shuf | tr -d '\n' )

informação relacionada