Quero gerar uma senha aleatória e faço assim:
</dev/urandom tr -dc [:print:] | head -c 64
No meu laptop, que executa o Ubuntu, isso produz apenas caracteres imprimíveis, conforme pretendido. Mas quando ssh no servidor da minha escola, que executa o Red Hat Enterprise Linux, e o executo lá, recebo resultados como o 3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K
que não funcionam. O que pode estar errado aqui?
fonte
:graph:
em vez de:print:
:</dev/urandom LC_ALL=C tr -dc '[:graph:]' | head -c 64
Considere em vez disso
Isso tem duas vantagens:
Você lê apenas 48 bytes do dispositivo aleatório, não ~ 8KB; se outros processos no mesmo host precisarem de números aleatórios, 8 KB esgotados de uma só vez podem ser um problema sério. (Sim, sem dúvida, ninguém deve estar usando o bloqueio de dispositivo aleatório, mas as pessoas fazem .)
A saída de
base64
quase não contém caracteres com significados especiais. (Para nenhum, a aderência| tr +/ -_
sobre a extremidade, e (como no exemplo) certificar-se o número de bytes de entrada abase64
é um múltiplo de 3)Uma senha gerada dessa maneira possui exatamente 384 bits de entropia, que é um pouco menor do que o que você estava fazendo (log 2 96 64 × 421.4), mas é mais do que suficiente para a maioria dos propósitos (256 bits de entropia está em segurança "ainda adivinhando quando o A Sun queima o território ", exceto as chaves RSA, AFAIK).
fonte
Outras pessoas já apontaram que locale determina o que
[:print:]
significa. No entanto, nem todos os caracteres imprimíveis são adequados para senhas (nem mesmo em ascii). Você realmente não quer espaços, tabulações e # $% ^? na sua senha - não é apenas difícil de lembrar, também é potencialmente perigoso para o sistema de autenticação subjacente, pode ser impossível entrar em um campo de entrada e assim por diante. Nesse caso, você deve apenas selecionar manualmente caracteres "sãos":ou simplesmente
Ou melhor ainda, use
base64
como sugerido em outras respostas.fonte
?
ou^
é ruim demais para ser levado a sério.[:print:]
classe C locale não inclui guias. É apenas[:alnum:]
+[:punct:]
+ espaço (espaço único, não[:space:]
).Sobre o quê
strings devem imprimir a saída do urandom em um formato imprimível
fonte
-bash: /dev/urandom: Permission denied
Não sei se existe algum motivo para você
/dev/random
gerar a senha, mas eu recomendaria o uso do pwgen para aliviar sua dor.Onde 10 é o comprimento da senha.
http://man.cx/pwgen
fonte
Este método IMHO é mais inteligente quando consumir dados de / dev / urandom A string colada como $ P $ P $ P ... deve ter pelo menos 256 caracteres.
fonte