v1.2.8: доступ к панели в конце установки; kit local uninstall + пункт 10 в меню (SSH не трогает)
This commit is contained in:
@@ -10,6 +10,18 @@
|
||||
канал обновлений и оговорки. Две картинки — наши (`manuals/assets/fork-banner.svg` и
|
||||
`manuals/assets/script-3x-ui-local.svg`, терминал собран из настоящего вывода скрипта).
|
||||
* Шов в README больше не нужен (`tools/fork_apply.py`): файл наш целиком, как `kit-local.sh`.
|
||||
## v1.2.8: доступ к панели в конце установки и снос сервера из меню
|
||||
|
||||
* В конце установки (перед подпиской) печатается **доступ к панели 3X-UI**: адрес, логин и пароль из
|
||||
файла `/root/3x-ui.txt` — раньше это было видно только в общем потоке вывода установщика.
|
||||
* **`kit local uninstall`** — снос установки целиком: панель и служба `x-ui`, ядро Xray, службы и файлы
|
||||
kit (`kit-sub`, автообновление, cron), конфиги nginx и сайт-заглушка, сертификаты (acme.sh),
|
||||
наши правки системы (правило ICMP, обновления безопасности), наши бэкапы и файл с данными панели.
|
||||
Правила ufw для 80/443 снимаются, ответ на ping возвращается. Спрашивает подтверждение словом
|
||||
«удалить», есть `--dry-run`.
|
||||
**SSH не трогается** — ни порт, ни конфиги, ни правила для него: иначе легко потерять доступ к серверу.
|
||||
В главном меню `kit` появился пункт **10. Удалить всё установленное**.
|
||||
|
||||
## v1.2.7: имя 3X-UI_autoVPS, справка kit help, подписка с QR, живые кнопки на заглушках
|
||||
|
||||
* **Сборка называется `3X-UI_autoVPS`** (было `3X-UI KIT`): баннер сервера — `Hacker 07` в том же
|
||||
|
||||
+13
-1
@@ -42,7 +42,7 @@
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
KIT_VERSION="1.2.7" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
KIT_VERSION="1.2.8" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
||||
NS="3x-ui-kit-release"
|
||||
SIG_ID="releases@3x-ui-kit"
|
||||
@@ -411,6 +411,18 @@ ${G}${B}Готово.${N} Сервер поставлен из нашей сбо
|
||||
вернуться к авторскому каналу: положить авторский kit поверх и выполнить kit update --force
|
||||
EOF
|
||||
|
||||
# ------------------------------------------------------------------ доступ к панели (перед подпиской)
|
||||
|
||||
if [[ $show_sub == yes ]]; then
|
||||
say "панель 3X-UI: адрес, логин и пароль"
|
||||
if [[ -s /root/3x-ui.txt ]]; then
|
||||
printf ' файл: /root/3x-ui.txt (виден только root). Сохраните данные себе:\n'
|
||||
sed 's/^/ /' /root/3x-ui.txt
|
||||
else
|
||||
warn "файла /root/3x-ui.txt нет — адрес панели и логин были в выводе установщика выше"
|
||||
fi
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------ подписка, QR-код и доступы
|
||||
|
||||
# Показываем в самом конце, после всех проверок: это то, что человек уносит с собой.
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ wait_apt_idle() {
|
||||
XUI_VERSION="v3.9.0"
|
||||
# SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30).
|
||||
XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6"
|
||||
KIT_VERSION="1.2.7"
|
||||
KIT_VERSION="1.2.8"
|
||||
# kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main.
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION"
|
||||
# Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
||||
# останавливается и не заменяет команду hy2.
|
||||
|
||||
KIT_VERSION="1.2.7"
|
||||
KIT_VERSION="1.2.8"
|
||||
|
||||
cat >&2 <<'MSG'
|
||||
Отдельный установщик Hysteria2 больше не поддерживается.
|
||||
|
||||
@@ -73,6 +73,7 @@ kit_local_help() {
|
||||
kit local seams какие места форк правит в файлах автора
|
||||
kit local masking состояние маскировки (у REALITY должен быть свой домен)
|
||||
kit local hardening сводка по защите сервера и что ещё можно включить
|
||||
kit local uninstall снести всё, что поставила установка (SSH не трогает)
|
||||
|
||||
Заглушка (сайт на 443 и ответ Hysteria2 — одна и та же страница)
|
||||
kit local site поставить случайный сайт из нашего набора (10 штук)
|
||||
@@ -894,6 +895,7 @@ kit_local_cmd() {
|
||||
passwd | pass) shift; kit_local_passwd "$@" ;;
|
||||
upgrades | auto) shift; kit_local_upgrades "$@" ;;
|
||||
hardening | hard) shift; kit_local_hardening "$@" ;;
|
||||
uninstall | remove) shift; kit_local_uninstall "$@" ;;
|
||||
site | stub | stub-site) shift; kit_local_site "$@" ;;
|
||||
*)
|
||||
printf 'Неизвестная команда форка: %s\n' "$1" >&2
|
||||
@@ -905,6 +907,116 @@ kit_local_cmd() {
|
||||
|
||||
# Точка входа: вызывается из kit.sh с аргументами командной строки.
|
||||
# Если команда не наша — возвращаем 0, и kit работает ровно как раньше.
|
||||
# ---------------------------------------------------------------- снос установки целиком
|
||||
# Убираем всё, что появляется после установки: панель 3X-UI и службу x-ui, ядро Xray, службы и файлы
|
||||
# kit (kit-sub, автообновление, cron), конфиги nginx и сайт-заглушку, сертификаты, правила ufw для 80/443,
|
||||
# наши правки системы (правило ICMP, обновления безопасности), наши бэкапы и файл с данными панели.
|
||||
#
|
||||
# ЧЕГО НЕ ТРОГАЕМ: SSH — ни порт, ни конфиги, ни правила ufw для него, ни наш ssh-дроп-ин. Иначе легко
|
||||
# остаться без доступа к серверу. Если SSH-порт когда-то менялся, верните его сами: kit local ssh 22
|
||||
# (и закрыть лишние: kit local ssh --close-old 22).
|
||||
#
|
||||
# kit local uninstall спросит подтверждение словом «удалить»
|
||||
# kit local uninstall --dry-run только покажет, что будет удалено
|
||||
kit_local_uninstall() {
|
||||
kl_args "$@"
|
||||
local arg=${KL_REST[0]:-} ans answer
|
||||
case $arg in
|
||||
"") ;;
|
||||
--dry-run) KL_DRY=yes ;;
|
||||
*) kl_die "kit local uninstall [--dry-run]"; return 1 ;;
|
||||
esac
|
||||
|
||||
local -a svc=(x-ui kit-sub kit-update.timer kit-update.service)
|
||||
local -a files=(
|
||||
/usr/local/x-ui /etc/x-ui /usr/bin/x-ui /etc/systemd/system/x-ui.service
|
||||
/usr/local/bin/kit /usr/local/lib/kit /etc/kit /etc/kit-sub
|
||||
/etc/systemd/system/kit-sub.service /etc/systemd/system/kit-update.service
|
||||
/etc/systemd/system/kit-update.timer
|
||||
/etc/cron.d/kit-nginx-reload /etc/cron.d/kit-xui-menu /etc/cron.d/kit-sub-cert
|
||||
/etc/nginx/kit-stream.conf /etc/nginx/conf.d/kit.conf
|
||||
/var/www/kit /root/3x-ui.txt /root/cert /root/.acme.sh /etc/letsencrypt
|
||||
/etc/sysctl.d/99-kit-local-icmp.conf /etc/apt/apt.conf.d/52-kit-local-upgrades
|
||||
)
|
||||
local -a backups=()
|
||||
local b
|
||||
for b in /root/kit-local-backup-*; do [[ -e $b ]] && backups+=("$b"); done
|
||||
|
||||
kl_step "Будет удалено"
|
||||
printf ' службы: %s\n' "${svc[*]}"
|
||||
printf ' файлы и каталоги: %s\n' "${files[*]}"
|
||||
[[ ${#backups[@]} -eq 0 ]] || printf ' наши копии изменённых файлов: %s\n' "${backups[*]}"
|
||||
printf ' правила ufw для 80/tcp и 443/tcp (правило для SSH не трогаем)\n'
|
||||
printf ' ответ на ping вернём (снимем наше правило)\n'
|
||||
if kl_ufw_active; then
|
||||
if [[ $(grep -c '^# -A ufw-before-input -p icmp --icmp-type echo-request' /etc/ufw/before.rules 2>/dev/null || echo 0) -gt 0 ]]; then
|
||||
printf ' %s\n' "правило ICMP наше (строка закомментирована) — вернём как было"
|
||||
fi
|
||||
fi
|
||||
kl_ok "перезагрузка не потребуется, SSH и его порт не затрагиваются"
|
||||
|
||||
if kl_dry; then
|
||||
printf '\n (dry-run) ничего не делаю. Запустить по-настоящему: kit local uninstall\n'
|
||||
return 0
|
||||
fi
|
||||
kl_need_root || return 1
|
||||
|
||||
if [[ -z ${KIT_LOCAL_UNINSTALL_CONFIRMED:-} ]]; then
|
||||
printf '\n%sЧтобы удалить всё перечисленное, напишите слово «удалить»: %s' "${B:-}" "${N:-}"
|
||||
read -r ans </dev/tty 2>/dev/null || ans=""
|
||||
[[ ${ans,,} == "удалить" ]] || { kl_warn "не подтверждено — ничего не удаляю"; return 1; }
|
||||
fi
|
||||
|
||||
kl_step "Останавливаю и отключаю службы"
|
||||
local s
|
||||
for s in "${svc[@]}"; do
|
||||
systemctl disable --now "$s" >/dev/null 2>&1 && kl_ok "остановлено и отключено: $s" || kl_warn "служба $s не найдена (уже удалена?)"
|
||||
done
|
||||
if kl_have nginx; then
|
||||
local others
|
||||
others=$(find /etc/nginx/conf.d /etc/nginx/sites-enabled -type f -o -type l 2>/dev/null | grep -vE 'kit\.conf$|default$' | wc -l)
|
||||
if [[ $others -eq 0 ]]; then
|
||||
kl_run systemctl disable --now nginx >/dev/null 2>&1 && kl_ok "nginx остановлен (своих сайтов, кроме нашего, не было)"
|
||||
KL_NGINX_PURGE=yes
|
||||
else
|
||||
kl_ok "nginx оставляю: в нём есть другие сайты ($others) — уберу только наши конфиги"
|
||||
KL_NGINX_PURGE=no
|
||||
fi
|
||||
fi
|
||||
|
||||
kl_step "Убираю файлы"
|
||||
for f in "${files[@]}"; do
|
||||
[[ -e $f ]] || continue
|
||||
kl_run rm -rf "$f" && kl_ok "удалено: $f"
|
||||
done
|
||||
for f in "${backups[@]}"; do kl_run rm -rf "$f" && kl_ok "удалено: $f"; done
|
||||
[[ ${KL_NGINX_PURGE:-no} == yes ]] && { kl_run apt-get remove -y --purge nginx nginx-common >/dev/null 2>&1 && kl_ok "пакет nginx удалён"; }
|
||||
|
||||
kl_step "Возвращаю систему"
|
||||
kl_run systemctl daemon-reload
|
||||
if kl_ufw_active; then
|
||||
local p
|
||||
for p in 80/tcp 443/tcp 443/udp; do kl_run ufw delete allow "$p" >/dev/null 2>&1 && kl_ok "правило ufw снято: $p"; done
|
||||
if [[ -f $KL_UFW_RULES ]]; then
|
||||
kl_backup "$KL_UFW_RULES"; kl_backup "$KL_UFW6_RULES"
|
||||
kl_run sed -i 's/^# -A ufw-before-input -p icmp --icmp-type echo-request/-A ufw-before-input -p icmp --icmp-type echo-request/' "$KL_UFW_RULES"
|
||||
[[ -f $KL_UFW6_RULES ]] && kl_run sed -i 's/^# -A ufw6-before-input -p icmpv6 --icmpv6-type echo-request/-A ufw6-before-input -p icmpv6 --icmpv6-type echo-request/' "$KL_UFW6_RULES"
|
||||
kl_run ufw reload >/dev/null 2>&1
|
||||
kl_ok "ответ на ping возвращён"
|
||||
fi
|
||||
fi
|
||||
kl_run sysctl -q -w net.ipv4.icmp_echo_ignore_all=0 >/dev/null 2>&1 || true
|
||||
|
||||
kl_step "Проверка"
|
||||
local left=0
|
||||
for s in "${svc[@]}"; do systemctl list-unit-files 2>/dev/null | grep -q "^$s" && { kl_warn "осталась служба: $s"; left=1; }; done
|
||||
command -v kit >/dev/null && { kl_warn "команда kit ещё на месте (запустите команду ещё раз или удалите /usr/local/bin/kit)"; left=1; }
|
||||
ss -H -ltn 2>/dev/null | awk '{print $4}' | grep -qE '[:.]443$' && { kl_warn "порт 443 всё ещё кем-то слушается"; left=1; }
|
||||
(( left )) || kl_ok "от установки ничего не осталось, порт 443 свободен"
|
||||
kl_ok "SSH не тронут: порт 22 (или ваш текущий) и правила для него на месте"
|
||||
kl_step "Готово. Сервер вернулся к состоянию до установки."
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------- полная справка `kit help`
|
||||
# Категории и все команды: сначала авторские, затем наши. Если автор добавит команду, а справка
|
||||
# про неё не знает — сборку релиза остановит проверка tools/check-help.sh.
|
||||
@@ -951,6 +1063,7 @@ ${B:-}3X-UI_autoVPS ${KIT_VERSION:-?} — все команды${N:-} (то ж
|
||||
kit local site [--list | N | --show] сайт-заглушка: случайный ИТ-сайт, список, конкретный, какой стоит
|
||||
|
||||
Проверка и починка
|
||||
kit local uninstall снести установку целиком (панель, туннель, службы kit, сайт, сертификаты); SSH не трогает
|
||||
kit check [--deep | --fix] проверка сервера (--deep — ходит наружу как клиент)
|
||||
kit fix [--dry-run] безопасные починки: время, службы, конфиги
|
||||
kit local hardening сводка по защите и что ещё можно включить
|
||||
|
||||
+4
-2
@@ -12,7 +12,7 @@
|
||||
set -Eeuo pipefail
|
||||
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
||||
|
||||
KIT_VERSION="1.2.7"
|
||||
KIT_VERSION="1.2.8"
|
||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main"
|
||||
# Файлы новой версии берём из её тега, а не из меняющейся ветки main.
|
||||
kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; }
|
||||
@@ -2554,11 +2554,12 @@ menu_main() {
|
||||
box "3X-UI_autoVPS $KIT_VERSION – управление сервером" "1. Пользователи" "2. Протоколы, порты и маскировка" "3. Проверка сервера" "" \
|
||||
"4. Обновить kit и подписку" "5. Обновить панель 3X-UI" "6. Автообновление: включить или выключить" "" \
|
||||
"7. Резервная копия" "8. Версии" "" "9. Панель 3X-UI (меню x-ui)" "0. Выход"
|
||||
"10. Удалить всё установленное (наш пункт)"
|
||||
echo
|
||||
menu_status
|
||||
update_hint
|
||||
echo
|
||||
ask_num "Выбор [0-9]: "; c=$REPLY
|
||||
ask_num "Выбор [0-9, 10]: "; c=$REPLY
|
||||
case $c in
|
||||
1) menu_users ;;
|
||||
2) menu_net ;;
|
||||
@@ -2569,6 +2570,7 @@ menu_main() {
|
||||
7) run_action cmd_backup; pause ;;
|
||||
8) run_action cmd_version; pause ;;
|
||||
9) command -v x-ui >/dev/null && x-ui || echo "Меню x-ui не найдено." ;;
|
||||
10) kit_local_uninstall ;;
|
||||
0 | "") return 0 ;;
|
||||
*) echo "Нет такого пункта." ;;
|
||||
esac
|
||||
|
||||
@@ -226,6 +226,27 @@ def main():
|
||||
' grep -qxE "# (3X-UI KIT|3X-UI_autoVPS) $v" "$d/SHA256SUMS"',
|
||||
"проверка шапки подписанного релиза принимает и старое, и новое имя",
|
||||
),
|
||||
(
|
||||
'scripts/kit.sh',
|
||||
' "7. Резервная копия" "8. Версии" "" "9. Панель 3X-UI (меню x-ui)" "0. Выход"',
|
||||
False,
|
||||
' "7. Резервная копия" "8. Версии" "" "9. Панель 3X-UI (меню x-ui)" "0. Выход"\n "10. Удалить всё установленное (наш пункт)"',
|
||||
'пункт меню: снос установки',
|
||||
),
|
||||
(
|
||||
'scripts/kit.sh',
|
||||
' 9) command -v x-ui >/dev/null && x-ui || echo "Меню x-ui не найдено." ;;',
|
||||
False,
|
||||
' 9) command -v x-ui >/dev/null && x-ui || echo "Меню x-ui не найдено." ;;\n 10) kit_local_uninstall ;;',
|
||||
'пункт меню: снос установки (обработчик)',
|
||||
),
|
||||
(
|
||||
"scripts/kit.sh",
|
||||
'ask_num "Выбор [0-9]: "',
|
||||
False,
|
||||
'ask_num "Выбор [0-9, 10]: "',
|
||||
"подсказка выбора в меню учитывает новый пункт",
|
||||
),
|
||||
]
|
||||
|
||||
bad = 0
|
||||
|
||||
Reference in New Issue
Block a user