Ultima attività 1 day ago

Revisione 833856f1b041bcea5bf31ff2665c012369810512

vhostpwgen.sh Raw
1#!/bin/bash
2VERSION='1.0'
3
4generate_password() {
5 openssl rand -base64 12 | tr -d '/+' | cut -c1-16
6}
7
8user_exists() {
9 grep -q "^$1:" .htpasswd 2>/dev/null || grep -q "^$1 / " .htpasswd.txt 2>/dev/null
10}
11
12echo ""
13echo "=== Генератор паролей для Nginx (Basic Auth) ==="
14echo ""
15
16# Проверка файлов
17touch .htpasswd .htpasswd.txt
18
19# Ввод имени пользователя с проверкой
20while true; do
21 read -p "Введите имя пользователя: " USERNAME
22
23 if [[ -z "$USERNAME" ]]; then
24 echo "Имя пользователя не может быть пустым!"
25 continue
26 fi
27
28 if user_exists "$USERNAME"; then
29 echo "Ошибка: пользователь '$USERNAME' уже существует!"
30 read -p "Перезаписать? (y/N): " OVERWRITE
31
32 if [[ "$OVERWRITE" =~ [Yy] ]]; then
33 # Удаляем старые записи
34 sed -i "/^$USERNAME:/d" .htpasswd
35 sed -i "/^$USERNAME \/ /d" .htpasswd.txt
36 echo "Старые записи пользователя удалены."
37 break
38 else
39 continue
40 fi
41 else
42 break
43 fi
44done
45
46# Генерация пароля
47while true; do
48 PASSWORD=$(generate_password)
49 echo "--------------------------------"
50 echo "Сгенерирован пароль: $PASSWORD"
51 read -p "Использовать этот пароль? (Enter - принять, N - ввести вручную, AnyKey - сгенерировать новый): " CHOICE
52
53 case "$CHOICE" in
54 [Yy]|"" )
55 echo "Пароль принят."
56 break
57 ;;
58 [Nn] )
59 while true; do
60 read -s -p "Введите пароль: " PASSWORD
61 echo
62
63 if [[ -z "$PASSWORD" ]]; then
64 echo "Пароль не может быть пустым!"
65 continue
66 fi
67
68 read -s -p "Повторите пароль: " PASSWORD2
69 echo
70
71 if [[ "$PASSWORD" != "$PASSWORD2" ]]; then
72 echo "Пароли не совпадают!"
73 else
74 break
75 fi
76 done
77 break
78 ;;
79 * )
80 continue
81 ;;
82 esac
83done
84
85# Добавление записей
86HASH=$(openssl passwd -apr1 "$PASSWORD")
87echo "$USERNAME:$HASH" >> .htpasswd
88echo "$USERNAME / $PASSWORD" >> .htpasswd.txt
89
90# Итог
91echo "--------------------------------"
92echo "Данные успешно добавлены:"
93echo "Файл для Nginx: .htpasswd"
94echo "Резервная копия: .htpasswd.txt"
95echo "--------------------------------"
96echo "Логин: $USERNAME"
97echo "Пароль: $PASSWORD"
98echo "--------------------------------"
99