#!/usr/bin/env bash set -euo pipefail # Virtuality Cockpit auth helper # Checks Linux user password state and required groups for Cockpit/libvirt access. USER_NAME="${1:-${VIRTUALITY_USER:-${SUDO_USER:-root}}}" ESC="\033" RESET="${ESC}[0m" BOLD="${ESC}[1m" GREEN="${ESC}[32m" YELLOW="${ESC}[33m" RED="${ESC}[31m" CYAN="${ESC}[36m" GRAY="${ESC}[90m" ok() { echo -e "${GREEN}✓${RESET} $*"; } warn() { echo -e "${YELLOW}!${RESET} $*"; } fail() { echo -e "${RED}✗${RESET} $*"; exit 1; } if [[ "$EUID" -ne 0 ]]; then fail "Запусти от root: sudo bash scripts/fix_cockpit_auth.sh [user]" fi clear 2>/dev/null || true cat </dev/null 2>&1; then fail "Пользователь ${USER_NAME} не найден" fi ok "Пользователь найден: ${USER_NAME}" HASH="$(getent shadow "$USER_NAME" | cut -d: -f2 || true)" if [[ -z "$HASH" || "$HASH" == "!" || "$HASH" == "*" || "$HASH" == "!!" ]]; then warn "У пользователя ${USER_NAME} пароль не задан или заблокирован" echo echo -e "${BOLD}Для входа в Cockpit задай пароль:${RESET}" if [[ "$USER_NAME" == "root" ]]; then echo " passwd root" else echo " sudo passwd ${USER_NAME}" fi else ok "У пользователя ${USER_NAME} есть пароль" fi if [[ "$USER_NAME" != "root" ]]; then usermod -aG sudo "$USER_NAME" || true usermod -aG libvirt "$USER_NAME" || true usermod -aG kvm "$USER_NAME" || true ok "Пользователь ${USER_NAME} добавлен в группы sudo/libvirt/kvm" warn "Для применения групп нужно выйти из SSH и войти снова" else ok "root не требует добавления в группы" fi systemctl enable --now cockpit.socket >/dev/null 2>&1 || fail "Не удалось запустить cockpit.socket" ok "cockpit.socket включён и запущен" if command -v ufw >/dev/null 2>&1; then ufw allow 9090/tcp >/dev/null 2>&1 || true ok "UFW правило 9090/tcp добавлено/проверено" fi systemctl restart cockpit.socket >/dev/null 2>&1 || true ok "cockpit.socket перезапущен" SERVER_IP="$(hostname -I | awk '{print $1}')" echo echo -e "${GREEN}${BOLD}Готово.${RESET}" echo -e "${BOLD}Cockpit:${RESET} https://${SERVER_IP}:9090" echo -e "${BOLD}Login:${RESET} ${USER_NAME}" echo -e "${BOLD}Password:${RESET} пароль Linux-пользователя ${USER_NAME}" echo