KarelWintersky ha revisionato questo gist 1 day ago. Vai alla revisione
Nessuna modifica
KarelWintersky ha revisionato questo gist 1 day ago. Vai alla revisione
1 file changed, 98 insertions
vhostpwgen.sh(file creato)
| @@ -0,0 +1,98 @@ | |||
| 1 | + | #!/bin/bash | |
| 2 | + | VERSION='1.0' | |
| 3 | + | ||
| 4 | + | generate_password() { | |
| 5 | + | openssl rand -base64 12 | tr -d '/+' | cut -c1-16 | |
| 6 | + | } | |
| 7 | + | ||
| 8 | + | user_exists() { | |
| 9 | + | grep -q "^$1:" .htpasswd 2>/dev/null || grep -q "^$1 / " .htpasswd.txt 2>/dev/null | |
| 10 | + | } | |
| 11 | + | ||
| 12 | + | echo "" | |
| 13 | + | echo "=== Генератор паролей для Nginx (Basic Auth) ===" | |
| 14 | + | echo "" | |
| 15 | + | ||
| 16 | + | # Проверка файлов | |
| 17 | + | touch .htpasswd .htpasswd.txt | |
| 18 | + | ||
| 19 | + | # Ввод имени пользователя с проверкой | |
| 20 | + | while 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 | |
| 44 | + | done | |
| 45 | + | ||
| 46 | + | # Генерация пароля | |
| 47 | + | while 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 | |
| 83 | + | done | |
| 84 | + | ||
| 85 | + | # Добавление записей | |
| 86 | + | HASH=$(openssl passwd -apr1 "$PASSWORD") | |
| 87 | + | echo "$USERNAME:$HASH" >> .htpasswd | |
| 88 | + | echo "$USERNAME / $PASSWORD" >> .htpasswd.txt | |
| 89 | + | ||
| 90 | + | # Итог | |
| 91 | + | echo "--------------------------------" | |
| 92 | + | echo "Данные успешно добавлены:" | |
| 93 | + | echo "Файл для Nginx: .htpasswd" | |
| 94 | + | echo "Резервная копия: .htpasswd.txt" | |
| 95 | + | echo "--------------------------------" | |
| 96 | + | echo "Логин: $USERNAME" | |
| 97 | + | echo "Пароль: $PASSWORD" | |
| 98 | + | echo "--------------------------------" | |
Più nuovi
Più vecchi