Existen algunos generadores de "contraseñas XKCD", pero la tarea parece muy sencilla, por lo que quería una solución compacta y simple. Mis requisitos fueron:
- Alias de una línea (o función de pocas líneas) para ingresar
.profile
- Comandos estándar de Unix (no requieren paquetes)
- Salida de columna (como
pwgen
) - Palabras en mayúsculas (para facilitar la lectura)
(Estoy feliz de renunciar a las opciones de la línea de comandos a cambio de simplicidad).
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 actuales:
shuf
requierebrew install coreutils
en macOS (que también uso)sed
requierebrew install gnu-sed
(ídem)tr -d '\n' | awk '{print $1}'
Parece una tontería.
¿Cómo puedo crear una línea de comando breve pero legible que funcione tanto en Linux como en macOS?
Como nota al margen, descubrí que al usar SCOWL, que tiene una variedad desde listas cortas de palabras con nombres comunes hasta listas largas de palabras con palabras oscuras, puedes combinar memorabilidad vs. entropía.
Respuesta1
No tengo acceso a mi Mac desde donde estoy, pero como ejecuta OS X 10.4.11, no estoy seguro de que sea comparable a su entorno. Lo siguiente funciona para generar una única contraseña en FreeBSD. Si esto no satisface sus necesidades, no dude en dejarme saber lo que le falta en los comentarios:
(sort -R /usr/share/dict/words \
| head -n 4 \
| awk '{ sub(".", substr(toupper($0),1,1)); printf "%s", $0 }' \
; echo)
En FreeBSD y en mi sistema Arch Linux, sort -R
ordena la entrada de forma aleatoria. Es sólo pseudoaleatorio, pero eso es lo mejor que obtendrás con la mayoría de los otros programas. Luego elige cuatro palabras de ese conjunto con head
. En lugar de GNU sed
, awk
se puede utilizar para poner en mayúscula el primer carácter de cada línea. Finalmente, echo
se utiliza para colocar la nueva línea final. Todo esto está en una subcapa para facilitar su inclusión en un bucle, tubería u otra construcción.