Создание паролей XKCD из одной строки Bash

Есть несколько генераторов «XKCD password», но задача кажется такой прямой, поэтому я хотел получить компактное и простое решение. Мои требования:

  • Однострочный псевдоним (или несколько строк) для ввода .profile
  • Стандартные команды Unix (не требуют пакетов)
  • Вывод колонки (например, pwgen )
  • Заглавные слова (для удобства чтения)

(Я рад отказаться от параметров командной строки в обмен на простоту.)

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

Текущие проблемы:

  • shuf требует, чтобы shuf на macOS (который я также использую)
  • sed требует brew install gnu-sed (то же самое)
  • tr -d '\n' | awk '{print $1}' tr -d '\n' | awk '{print $1}' кажется глупым.

Как я могу сделать короткую, но читаемую командную строку, которая работает как на Linux, так и на macOS?

На стороне примечания я обнаружил, что с помощью SCOWL, который имеет диапазон от коротких списков слов с общими именами до длинного списка слов с неясными словами, вы можете компрометировать запоминаемость Vs. энтропия.

One Solution collect form web for “Создание паролей XKCD из одной строки Bash”

У меня нет доступа к моему Mac с того места, где я есть, но поскольку он работает с OS X 10.4.11, я не уверен, что он будет сопоставим с вашей средой. Следующее работает для создания единого пароля во FreeBSD. Если это не соответствует вашим потребностям, не стесняйтесь сообщить мне, чего не хватает в комментариях:

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

В FreeBSD и моей системе Arch Linux sort -R случайным образом заказывает ввод. Это всего лишь псевдослучайное, но это так же хорошо, как и с большинством других программ. Затем выберите четыре слова из этого набора с head . Вместо того, чтобы использовать GNU sed , awk можно использовать для создания первого символа каждой строки. Наконец, echo используется для размещения завершающей новой строки. Это все в подоболочке для более легкого включения в цикл, трубу или другую конструкцию.

  • Что делает «w» с урандом?
  • Предполагаемое генерирование большого количества псевдослучайных данных
  • Генерирование файла с помощью ASCII-номеров с использованием / dev / urandom?
  • CentOS PXE / Anaconda / kickstart ждут, чтобы собрать достаточно энтропии
  • Подача / dev / random с чтением диска и т. Д.
  • Сценарий Bash для произвольного расширения имени файла
  • Linux и Unix - лучшая ОС в мире.