#!/bin/bash VERSION='1.0' generate_password() { openssl rand -base64 12 | tr -d '/+' | cut -c1-16 } user_exists() { grep -q "^$1:" .htpasswd 2>/dev/null || grep -q "^$1 / " .htpasswd.txt 2>/dev/null } echo "" echo "=== Генератор паролей для Nginx (Basic Auth) ===" echo "" # Проверка файлов touch .htpasswd .htpasswd.txt # Ввод имени пользователя с проверкой while true; do read -p "Введите имя пользователя: " USERNAME if [[ -z "$USERNAME" ]]; then echo "Имя пользователя не может быть пустым!" continue fi if user_exists "$USERNAME"; then echo "Ошибка: пользователь '$USERNAME' уже существует!" read -p "Перезаписать? (y/N): " OVERWRITE if [[ "$OVERWRITE" =~ [Yy] ]]; then # Удаляем старые записи sed -i "/^$USERNAME:/d" .htpasswd sed -i "/^$USERNAME \/ /d" .htpasswd.txt echo "Старые записи пользователя удалены." break else continue fi else break fi done # Генерация пароля while true; do PASSWORD=$(generate_password) echo "--------------------------------" echo "Сгенерирован пароль: $PASSWORD" read -p "Использовать этот пароль? (Enter - принять, N - ввести вручную, AnyKey - сгенерировать новый): " CHOICE case "$CHOICE" in [Yy]|"" ) echo "Пароль принят." break ;; [Nn] ) while true; do read -s -p "Введите пароль: " PASSWORD echo if [[ -z "$PASSWORD" ]]; then echo "Пароль не может быть пустым!" continue fi read -s -p "Повторите пароль: " PASSWORD2 echo if [[ "$PASSWORD" != "$PASSWORD2" ]]; then echo "Пароли не совпадают!" else break fi done break ;; * ) continue ;; esac done # Добавление записей HASH=$(openssl passwd -apr1 "$PASSWORD") echo "$USERNAME:$HASH" >> .htpasswd echo "$USERNAME / $PASSWORD" >> .htpasswd.txt # Итог echo "--------------------------------" echo "Данные успешно добавлены:" echo "Файл для Nginx: .htpasswd" echo "Резервная копия: .htpasswd.txt" echo "--------------------------------" echo "Логин: $USERNAME" echo "Пароль: $PASSWORD" echo "--------------------------------"