Primeiro, instale um dicionário de um idioma com o qual você está familiarizado:
sudo apt-get install <language-package>
Para ver todos os pacotes disponíveis:
apt-cache search wordlist | grep ^w
Nota: todas as instruções de instalação assumem que você está em um sistema operacional baseado no Debian.
Depois de instalar o dicionário, execute:
WORDS=5; LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${WORDS} | paste -sd "-"
Qual será a saída ex:
blasphemous-commandos-vasts-suitability-arbor
Para dividir:
-
WORDS=5;
- escolha quantas palavras você deseja em sua senha. -
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words
- escolha apenas palavras que contenham caracteres alfabéticos minúsculos (exclui palavras com'
ou caracteres originais comoéclair
).LC_ALL=C
garante que[a-z]
na expressão regular não corresponda a símbolos semelhantes a letras que não sejam letras minúsculas sem diacríticos. -
shuf --random-source=/dev/urandom -n ${WORDS}
- escolheu quantas PALAVRAS foram solicitadas.--random-source=/dev/urandom
garante queshuf
semeia seu gerador aleatório com segurança; sem ele,shuf
é padronizado para uma semente segura, mas pode retornar a uma semente não segura em alguns sistemas, como algumas camadas de emulação Unix no Windows. -
paste -sd "-"
- una todas as palavras usando-
(sinta-se livre para mudar o símbolo para outra coisa).
Como alternativa, você pode envolvê-lo em uma função:
#!/bin/bash
function memorable_password() {
words="${1:-5}"
sep="${2:--}"
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${words} | paste -sd "$sep"
}
ou
#!/bin/sh
memorable_password() {
words="$1"
if [ -z "${words}" ]; then
words=5
fi
sep="$2"
if [ -z "${sep}" ]; then
sep="-"
fi
LC_ALL=C grep -x '[a-z]*' /usr/share/dict/words | shuf --random-source=/dev/urandom -n ${words} | paste -sd "$sep"
}
Ambos podem ser chamados como tal:
memorable_password 7 _
memorable_password 4
memorable_password
Retornando:
skipped_cavity_entertainments_gangway_seaports_spread_communique
evaporated-clashes-bold-presuming
excelling-thoughtless-pardonable-promulgated-forbearing
Bônus
Para uma senha nerd e divertida, mas não muito segura, que não requer instalação de dicionário, você pode usar (cortesia de @jpa):
WORDS=5; man git | \
tr ' ' '\n' | \
egrep '^[a-z]{4,}$' | \
sort | uniq | \
shuf --random-source=/dev/urandom -n ${WORDS} | \
paste -sd "-"