tgoop.com/t0digital/949
Last Update:
Задался тут вопросом генерации паролей, чтобы найти способ быстро и безопасно генерировать хорошие пароли в консоли с какой-то open source тулзой.
Для хранения паролей я использую pass, он умеет генерировать пароли, но только сразу сохраняя их в хранилище (pass generate Email/[email protected] 20
создаст и сохранит пароль на 20 символов). А иногда я не хочу сохранять их в хранилище так, как делает это pass — например, потому что в одной записи pass у меня часто хранится не только пароль, но и другие данные к этому сервису, например, логин, и я не хочу перезаписывать всю запись новым сгенерированным паролем.
Получается, надо сгенерировать пароль где-то еще.
Есть возможность генерировать с openssl в духе openssl rand -base64 20
, но тогда в пароле нет спец символов, а это нехорошо.
Есть опенсорсный pwgen, который умеет генерировать пароли и ставит своей задачей генерировать запоминаемые пароли. Запоминаемые пароли мне не нужны и pwgen умеет генерировать и такие:
pwgen -sy 20 1
-s
означает секьюрненько, то есть без запар с лёгкостью запоминания, рандомно. -y
означает со спец символами. 20
означает количество символов в пароле. 1
означает количество паролей для генерации.Ляпота!
Но в целом, разумеется, bash & *nix великолепны и можно прийти к успеху и без внешних утилит:
LC_ALL=C tr -dc 'A-Za-z0-9@#%^&*()_+=-{}[]:;<>,.?/' \
< /dev/urandom | head -c 20 | xargs echo
Что тут происходит? Устанавливается локаль в С для корректной работы с символами в разных условиях, затем на вход
tr
передаются случайные байты из /dev/urandom
, утилита tr
с флагом -d
удаляет указанные символы, флаг -с
инвертирует выбор, то есть в потоке байт удалится всё кроме указанных символов (то есть удалится всё, кроме a-z, цифр и спец символов), затем head
берёт первые 20 символов полученной строки, и мы выводим эту строку с echo
, чтобы нормально отобразился перенос строки в конце сгенерированного пароля.Можно сохранить эту команду в быстрый запуск, скажем, в alias:)
echo "alias pwgen=\"LC_ALL=C tr -dc 'A-Za-z0-9@#%^&*()_+=-{}[]:;<>,.?/' \
< /dev/urandom | head -c 20 | xargs echo\"" >> ~/.zshrc
PS. Заменить первую строку в записи pass новым сгенерированным паролем, оказывается, можно так:
pass generate -i Email/[email protected] 20
BY Диджитализируй!
Share with your friend now:
tgoop.com/t0digital/949