Генератор паролей на bash

Генератор паролей на bashВремя от времени приходится менять пароли. Все знают, что хороший пароль должен включать большие и малые латинские буквы, цифры и специальные символы. При этом они не должны быть слишком короткими. И каждый раз придумывать их все труднее и труднее, особенно если использовать разные пароли на разных сервисах. Можно для этого использовать, например, программу pwgen или генератор, встроенный в keepassx. А можно написать простой генератор паролей на bash.

Используемые символы

Будем использовать следующие символы: Большие и малые буквы латинского алфавита (A-Z и a-z), цифры (0-9) и символы «!@#$%^&*()?/\[]{}-+_=<>.,». Такое сочетание обеспечит максимальную надежность.

Длина пароля

Длина пароля будет 16 символов. Если вам нужен более короткий пароль, то вы можете указать меньшую длину в скрипте, либо добавить опцию командной строки.

Скрипт-генератор паролей на bash

Самое первое, что нам необходимо — это переменная, содержащая все символы, которые мы будем использовать. Также нужна будет переменная, содержащая длину пароля и переменная для хранения самого пароля.

SYMBOLS=""
for symbol in {A..Z} {a..z} {0..9}; do SYMBOLS=$SYMBOLS$symbol; done
SYMBOLS=$SYMBOLS'!@#$%&*()?/\[]{}-+_=<>.,'
# Строка со всеми символами создана.
# Теперь нам надо в цикле с количеством итераций равным длине пароля
# случайным образом взять один символ и добавить его в строку, содержащую пароль.
PWD_LENGTH=16  # длина пароля
PASSWORD=""    # переменная для хранения пароля
RANDOM=256     # инициализация генератора случайных чисел
for i in `seq 1 $PWD_LENGTH`
do
PASSWORD=$PASSWORD${SYMBOLS:$(expr $RANDOM % ${#SYMBOLS}):1}
done
echo $PASSWORD

Вот и всё. Это весь скрипт. И с его помощью мы можем получить пароль, который удовлетворяет всем распространенным требованиям безопасности. Осталась только одна проблема — запомнить его.
 

Генератор паролей на bash: 12 комментариев

  1. Alex

    Практический смысл в таком скрите весьма минимален. Это как в притче о чуваке, который всю жизнь учился ходить по воде, хотя можно просто использовать мост. Есть огромная куча сайтов для генерации паролей. А есть даже те, которые со своим API http://www.passwordrandom.com/Meter.aspx

    Хотя, с точки зрения тренировки и практики — свой велосипед в пароледеланьи — вполне неплохая метода к профессиональному росту :)

    1. mnorin Автор записи

      Этот скрипт тут как раз с точки зрения тренировки. А вот сайтам для генерации паролей я бы не доверял, пожалуй. :)

  2. г Чайковский, админ сайта

    Большое спасибо! Ваш скрипт пригодился. bash для автоматизации задач, одна из них — периодическая смена паролей.

  3. Oleg

    Спасибо, пригодился для создания разово 200 юзеров

    1. Maxim Norin Автор записи

      Это хорошо, но где спецсимволы?

  4. Ilya

    Максим привет! А как прикрутить к твоему генератору НЕ повторяющиеся Uppercase Letters и Lowercase Letters, а также пробелы в пароле?
    Зы: Навеяно мотивами — http://www.passwordmeter.com/
    К, примеру вот такой 26-ти значный пароль удоволетворяет требованиям сайта:
    k Eu&V+Gz) $PiC@LqF-w%tYa2

    1. Maxim Norin Автор записи

      Привет. Пробел просто добавить в список символов SYMBOLS, а на уникальность проверять можно, например, так:

      if [[ passw = *${symbol}* ]] ...

  5. Ilya

    А чего комменты не публикуются на сайте?

  6. Василий

    А как сгенерировать пароль случайным образом, но чтобы в нём всегда обязательно был минимум один спец-символ, цифра и буквы в разных регистрах? А то временами генерируется только буквенный пароль.
    Я использую следующий код для генерации MySql пароля, но время от времени он не соответствует уровню MEDIUM (Your password does not satisfy the current policy requirements):

    < /dev/urandom tr -dc '_A-Za-z0-9!@#$%^&*-_=+?;:' | head -c12

    1. Maxim Norin Автор записи

      Можно попробовать так (если количество кода не смущает):

      #!/bin/bash
      CAPS=$(< /dev/urandom tr -dc 'A-Z' | head -c 3)
      SMALL=$(< /dev/urandom tr -dc 'a-z' | head -c 3)
      NUMS=$(< /dev/urandom tr -dc '0-9' | head -c3)
      SPECS=$(< /dev/urandom tr -dc '_!@#$%^&*()-+=:;?' | head -c3)
      shuf -e $(echo ${CAPS}${SMALL}${NUMS}${SPECS} | fold -w1 ) | tr -d '\n'
      

Обсуждение закрыто.