Quiero generar una contraseña aleatoria, y lo estoy haciendo así:
</dev/urandom tr -dc [:print:] | head -c 64
En mi computadora portátil, que ejecuta Ubuntu, esto produce solo caracteres imprimibles, según lo previsto. Pero cuando entro en el servidor de mi escuela, que ejecuta Red Hat Enterprise Linux, y lo ejecuto allí, obtengo resultados como 3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�K
, lo que no funcionará en absoluto. ¿Qué podría estar yendo mal aquí?
fuente
:graph:
lugar de:print:
:</dev/urandom LC_ALL=C tr -dc '[:graph:]' | head -c 64
Considere en su lugar
Esto tiene dos ventajas:
Usted lee solo 48 bytes del dispositivo aleatorio, no ~ 8 KB; Si otros procesos en el mismo host necesitan números aleatorios, 8 KB agotados de una vez puede ser un problema grave. (Sí, podría decirse que nadie debería estar usando el dispositivo aleatorio de bloqueo , pero la gente sí ).
La salida de
base64
casi no contiene caracteres con significados especiales. (Para ninguno en absoluto, tachuela| tr +/ -_
en el extremo, y (como en el ejemplo) asegurarse de que el número de bytes de entrada abase64
es un múltiplo de 3.)Una contraseña generada de esta manera tiene exactamente 384 bits de entropía, que es algo menor que lo que estaba haciendo (log 2 96 64 ≈ 421.4), pero más que suficiente para la mayoría de los propósitos (256 bits de entropía es seguro "todavía adivinando cuando El sol quema "territorio excepto para las claves RSA, AFAIK).
fuente
Otras personas ya señalaron que la configuración regional determina lo que
[:print:]
significa. Sin embargo, no todos los caracteres imprimibles son adecuados para contraseñas (ni siquiera en ascii). ¿Realmente no quieres espacios, pestañas y # $% ^? en su contraseña: no solo es difícil de recordar, también es potencialmente peligroso para el sistema de autenticación subyacente, puede ser imposible ingresar en un campo de entrada, etc. En este caso, debe seleccionar manualmente los caracteres "sanos":o simplemente
O incluso mejor, use
base64
como se sugiere en otras respuestas.fuente
?
o^
es demasiado malo para ser tomado en serio.[:print:]
clase locale no incluye pestañas. Es solo[:alnum:]
+[:punct:]
+ espacio (espacio único, no[:space:]
).Qué pasa
las cadenas deben imprimir la salida de urandom en un formato imprimible
fuente
-bash: /dev/urandom: Permission denied
No sé si hay alguna razón por la que usas
/dev/random
para generar la contraseña, pero te recomendaría usar pwgen para aliviar tu dolor.Donde 10 es la longitud de la contraseña.
http://man.cx/pwgen
fuente
Este método en mi humilde opinión es más inteligente cuando se consumen datos de / dev / urandom. La cadena pegada como $ P $ P $ P ... debe tener al menos 256 caracteres de longitud.
fuente