Gere senhas XKCD a partir de uma única linha Bash

Gere senhas XKCD a partir de uma única linha Bash

Existem alguns geradores de "senha XKCD" por aí, mas a tarefa parece tão simples, então eu queria uma solução compacta e simples. Meus requisitos eram:

  • Alias ​​de uma linha (ou função de poucas linhas) para inserir.profile
  • Comandos Unix padrão (não requerem pacotes)
  • Saída da coluna (como pwgen)
  • Palavras do título (para facilitar a leitura)

(Fico feliz em renunciar às opções de linha de comando em troca de simplicidade.)

for i in {1..32}; do grep -E "^[a-z]{4,8}$" /usr/share/dict/words | gshuf -n4 | gsed 's/.*/\u&/' | tr -d '\n' | awk '{print $1}'; done | column

Problemas atuais:

  • shufrequer brew install coreutilsno macOS (que eu também uso)
  • sedrequer brew install gnu-sed(idem)
  • tr -d '\n' | awk '{print $1}'parece bobo.

Como posso criar uma linha de comando curta, mas legível, que funcione tanto no Linux quanto no macOS?

Por outro lado, descobri que, ao usar o SCOWL, que varia de listas curtas de palavras com nomes comuns a listas longas de palavras com palavras obscuras, você pode compensar a memorabilidade versus a memorização. entropia.

Responder1

Não tenho acesso ao meu Mac de onde estou, mas como ele está executando o OS X 10.4.11, não tenho certeza se seria comparável ao seu ambiente. O seguinte funciona para gerar uma única senha no FreeBSD. Se isso não atender às suas necessidades, sinta-se à vontade para me informar o que falta nos comentários:

(sort -R /usr/share/dict/words                                   \
 | head -n 4                                                     \
 | awk '{ sub(".", substr(toupper($0),1,1)); printf "%s", $0 }'  \
 ; echo)

No FreeBSD e no meu sistema Arch Linux, sort -Rordena aleatoriamente a entrada. É apenas pseudo-aleatório, mas é tão bom quanto você conseguirá com a maioria dos outros programas. Em seguida, escolha quatro palavras desse conjunto com head. Em vez de GNU sed, awkpode ser usado para colocar o primeiro caractere de cada linha em maiúscula. Finalmente, echoé usado para colocar a nova linha final. Tudo isso está em um subshell para facilitar a inclusão em um loop, tubo ou outra construção.

informação relacionada