v1.2.23: убран дубль доступов, заглушка сразу наша, ссылки только для нескольких протоколов
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
## v1.2.23: чистый вывод — без дублей доступов, без авторской заглушки, без лишних ссылок
|
||||
|
||||
* **Убран дублирующий блок автора.** Он печатал «Готово! Сервер работает» с адресом панели, логином,
|
||||
паролем, подпиской, QR-кодом и ссылками — а потом то же самое выводил наш финальный блок.
|
||||
Теперь авторский блок заканчивается строкой «Установка завершена» и списком предупреждений;
|
||||
доступы и подписка печатаются один раз, в самом конце.
|
||||
* **Авторская заглушка больше не ставится.** Наш сайт кладётся до установщика, а его страница из
|
||||
релиза убирается — иначе она перезаписывала нашу на шаге сборки сайта. Заодно пропадает лишний
|
||||
шаг «поставить поверх» и его бэкап.
|
||||
* **Ссылки по протоколам — только если протоколов больше одного.** При одном REALITY печатается
|
||||
подписка и QR-код, без списка «отдельные ссылки на каждый протокол».
|
||||
* Самопроверка в конце установки больше не перечисляет чужие протоколы («REALITY, XHTTP и
|
||||
Hysteria2») — пишет те, что реально созданы. Предупреждение про XHTTP/MTProto показывается только
|
||||
если эти протоколы выбраны.
|
||||
|
||||
## v1.2.22: 80 в ufw открывается прямо перед выпуском сертификата
|
||||
|
||||
* Настоящая причина сбоя сертификата (проверено на живом сервере): установщик открывает список
|
||||
|
||||
+35
-4
@@ -44,7 +44,7 @@
|
||||
|
||||
set -Eeuo pipefail
|
||||
|
||||
KIT_VERSION="1.2.22" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
KIT_VERSION="1.2.23" # версия сборки форка; должна совпадать с VERSION релиза
|
||||
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
||||
NS="3x-ui-kit-release"
|
||||
SIG_ID="releases@3x-ui-kit"
|
||||
@@ -446,6 +446,28 @@ else
|
||||
fi
|
||||
command -v kit >/dev/null || die "после установки нет команды kit — что-то пошло не так, смотрите вывод выше"
|
||||
|
||||
# Ставим нашу заглушку СРАЗУ (а не поверх авторской): страницу кладём до установщика, а его собственную
|
||||
# страницу из релиза убираем — иначе она перезапишет нашу на шаге сборки сайта.
|
||||
stub_staged=no
|
||||
if [[ $site != off ]]; then
|
||||
stub_n=""
|
||||
case $site in
|
||||
random) stub_n=$(( RANDOM % 10 )) ;;
|
||||
*) [[ $site =~ ^[0-9]+$ ]] && stub_n=$((10#$site - 1)) ;;
|
||||
esac
|
||||
if [[ -n $stub_n ]]; then
|
||||
install -d -m 755 /var/www/kit
|
||||
if ( source "$tmp/scripts/kit-local.sh" 2>/dev/null; kl_site_html "$stub_n" ) >/var/www/kit/index.html 2>/dev/null \
|
||||
&& [[ -s /var/www/kit/index.html ]]; then
|
||||
stub_staged=yes
|
||||
rm -f "$tmp/var/www/kit/index.html"
|
||||
say "заглушка: наш сайт №$((stub_n + 1)) — ставится сразу, авторская страница не используется"
|
||||
else
|
||||
warn "не смог подготовить нашу заглушку — поставлю после установки (kit local site)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Запоминаем, какие протоколы выбраны: наши команды (kit local site и др.) смотрят сюда и не
|
||||
# делают ничего для протоколов, которых в этой установке нет.
|
||||
printf '%s\n' "${protos//,/ }" | tr ' ' '\n' | sed '/^$/d' > /etc/kit/kl-protos 2>/dev/null || true
|
||||
@@ -462,7 +484,9 @@ fi
|
||||
# Сайт-заглушка: у автора это случайные «кофейни и пекарни», у нас — правдоподобный ИТ-сайт.
|
||||
# Меняем не файл вручную, а командой форка: она же обновляет копию страницы в ответе Hysteria2,
|
||||
# иначе 443/tcp и UDP-порт начнут отвечать разными страницами (это видно снаружи).
|
||||
case $site in
|
||||
case ${stub_staged:-no} in
|
||||
yes) say "заглушка уже стоит (поставлена при установке, Hysteria2 синхронизирован тем же файлом)" ;;
|
||||
*) case $site in
|
||||
off) say "заглушку не трогаю (--no-site): остаётся страница автора" ;;
|
||||
random)
|
||||
say "ставлю сайт-заглушку: случайный ИТ-сайт из нашего набора"
|
||||
@@ -472,6 +496,7 @@ case $site in
|
||||
say "ставлю сайт-заглушку №$site"
|
||||
kit local site "$site" || warn "не удалось поставить заглушку — позже: kit local site $site"
|
||||
;;
|
||||
esac ;;
|
||||
esac
|
||||
|
||||
if [[ $fix_time == yes ]]; then
|
||||
@@ -558,8 +583,14 @@ if [[ $show_sub == yes ]]; then
|
||||
printf ' отдельные ссылки по протоколам — ниже же (если приложение не умеет подписку)\n'
|
||||
printf ' %sпозже то же самое: kit user link %s --all (или меню: kit)%s\n' "$D" "$sub_user" "$N"
|
||||
[[ -n ${ssh_port:-} ]] && printf ' SSH: новый порт %s, прежние (%s) ещё открыты — закройте их после проверки входа: kit local ssh --close-old %s\n' "$ssh_port" "${ssh_ports_before:-22}" "$ssh_port"
|
||||
if ! kit user link "$sub_user" --all; then
|
||||
warn "не смог показать ссылки для «$sub_user» — список пользователей: kit user list"
|
||||
# Ссылки на каждый протокол показываем только если протоколов больше одного: при одном это лишний шум.
|
||||
protos_now=$(tr '\n' ' ' < /etc/kit/kl-protos 2>/dev/null || true)
|
||||
if [[ $(wc -w <<<"$protos_now") -gt 1 ]]; then
|
||||
if ! kit user link "$sub_user" --all; then
|
||||
warn "не смог показать ссылки для «$sub_user» — список пользователей: kit user list"
|
||||
fi
|
||||
elif ! kit user link "$sub_user"; then
|
||||
warn "не смог показать подписку для «$sub_user» — список пользователей: kit user list"
|
||||
fi
|
||||
else
|
||||
say "ссылки и QR-код не показываю (--no-sub). Посмотреть: kit user link admin --all"
|
||||
|
||||
+7
-36
@@ -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.22"
|
||||
KIT_VERSION="1.2.23"
|
||||
# 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,
|
||||
@@ -711,7 +711,9 @@ kl_sni_menu() {
|
||||
done
|
||||
SNI2=${SNI2:-$SNI}; SNI3=${SNI3:-www.cloudflare.com}
|
||||
if [[ $TRUSTED == yes && $multi == no && ( $SNI2 =~ $SNI_BRAND_RE || $SNI3 =~ $SNI_BRAND_RE ) ]]; then
|
||||
later "XHTTP и MTProto используют известные сайты из общего списка (достаточно соседей по подсети не нашлось). Заменить: kit net site"
|
||||
# Наш шов: про XHTTP и MTProto говорим только если они выбраны — иначе это шум.
|
||||
[[ " ${PROTOS[*]} " == *" xhttp "* || " ${PROTOS[*]} " == *" mtproto "* ]] && \
|
||||
later "XHTTP и MTProto используют известные сайты из общего списка (достаточно соседей по подсети не нашлось). Заменить: kit net site"
|
||||
fi
|
||||
|
||||
step "Пакеты"
|
||||
@@ -841,7 +843,7 @@ kl_sni_menu() {
|
||||
chk=$(/usr/local/bin/kit check --deep 2>&1) && { bad=no; break; }
|
||||
done
|
||||
if [[ $bad == no ]]; then
|
||||
ok "подключения работают: REALITY, XHTTP и Hysteria2 проверены клиентом с самого сервера"
|
||||
ok "подключения работают (проверено клиентом с самого сервера): ${CREATED[*]:-нет}"
|
||||
else
|
||||
install -m 600 /dev/null /var/log/kit-install-check.log
|
||||
printf '%s\n' "$chk" >/var/log/kit-install-check.log
|
||||
@@ -886,33 +888,7 @@ kl_sni_menu() {
|
||||
} >"$RESULT"
|
||||
|
||||
echo
|
||||
echo "${G}${B}Готово! Сервер работает.${N}"
|
||||
[[ -n $DOMAIN ]] && echo "Маскировка: свой домен ${B}$DOMAIN${N}, сертификат Let's Encrypt продлевается сам."
|
||||
[[ $SELF_IP_CERT == yes ]] && later "Сертификат на IP самоподписанный: пользуйтесь ссылками на отдельные подключения, подписка в приложениях может не открыться."
|
||||
echo
|
||||
echo "${B}ПАНЕЛЬ${N}"
|
||||
if [[ $TRUSTED == yes ]]; then
|
||||
echo " $panel_url"
|
||||
else
|
||||
echo " Только через SSH-туннель. На вашем компьютере:"
|
||||
echo " ssh -L $XUI_PANEL_PORT:127.0.0.1:$XUI_PANEL_PORT root@$HOST"
|
||||
echo " Затем в браузере: http://127.0.0.1:$XUI_PANEL_PORT/$XUI_WEB_BASE_PATH"
|
||||
fi
|
||||
echo " Логин: ${B}$XUI_USERNAME${N} Пароль: ${B}$XUI_PASSWORD${N}"
|
||||
echo " ${D}(сохранено в $RESULT, файл виден только root)${N}"
|
||||
echo
|
||||
if [[ $TRUSTED == yes ]]; then
|
||||
echo "${B}ПОДПИСКА${N} – одна ссылка для всех протоколов"
|
||||
echo " ${B}$SUB_URL${N}"
|
||||
echo " Вставьте в Happ, Hiddify, Karing, v2rayN, Clash Verge или FlClash."
|
||||
qrencode -t ANSIUTF8 -m 1 "$SUB_URL" || true
|
||||
echo
|
||||
KIT_NO_QR=1 /usr/local/bin/kit __links "$NAME" "$SUBID" || true
|
||||
else
|
||||
/usr/local/bin/kit __links "$NAME" "$SUBID" || true
|
||||
fi
|
||||
echo
|
||||
echo "${D}Порты, выключение и включение протоколов: ${N}${B}kit net${N}"
|
||||
echo "${G}${B}Установка завершена.${N} Доступы к панели, подписка и QR-код — в самом конце вывода."
|
||||
if ((${#WARNINGS[@]})); then
|
||||
echo
|
||||
echo "${B}ВНИМАНИЕ${N}"
|
||||
@@ -923,12 +899,7 @@ kl_sni_menu() {
|
||||
done
|
||||
((${#WARNINGS[@]} > 3)) && echo " … и ещё $((${#WARNINGS[@]} - 3)): kit check"
|
||||
fi
|
||||
echo
|
||||
echo "${B}ДАЛЬШЕ${N}"
|
||||
echo " ${B}kit${N} меню управления"
|
||||
echo " ${B}kit user add имя --gb 50 --days 30${N} добавить пользователя"
|
||||
echo " ${B}kit check --deep${N} проверить, что всё работает"
|
||||
echo " ${B}kit backup${N} копия сервера (держите в надёжном месте)"
|
||||
|
||||
}
|
||||
|
||||
# Официальный установщик 3X-UI закреплённой версии, сверенный по SHA256.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
||||
# останавливается и не заменяет команду hy2.
|
||||
|
||||
KIT_VERSION="1.2.22"
|
||||
KIT_VERSION="1.2.23"
|
||||
|
||||
cat >&2 <<'MSG'
|
||||
Отдельный установщик Hysteria2 больше не поддерживается.
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
set -Eeuo pipefail
|
||||
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
||||
|
||||
KIT_VERSION="1.2.22"
|
||||
KIT_VERSION="1.2.23"
|
||||
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"; }
|
||||
|
||||
@@ -352,6 +352,20 @@ def main():
|
||||
' # Наш шов: если XHTTP и MTProto не выбраны, имена для них сейчас не нужны — не сканируем соседей\n # по подсети впустую (около 250 обращений к чужим 443). Имена SNI2/SNI3 возьмутся из общего списка ниже.\n if [[ $TRUSTED == yes && $multi == no && ( -z $SNI2 || -z $SNI3 ) ]] \\\n && [[ " ${PROTOS[*]} " == *" xhttp "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then\n',
|
||||
'авто-шов: replace, строк 1',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' later "XHTTP и MTProto используют известные сайты из общего списка (достаточно соседей по подсети не нашлось). Заменить: kit net site"\n',
|
||||
False,
|
||||
' # Наш шов: про XHTTP и MTProto говорим только если они выбраны — иначе это шум.\n [[ " ${PROTOS[*]} " == *" xhttp "* || " ${PROTOS[*]} " == *" mtproto "* ]] && \\\n later "XHTTP и MTProto используют известные сайты из общего списка (достаточно соседей по подсети не нашлось). Заменить: kit net site"\n',
|
||||
'авто-шов: replace, строк 1',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' ok "подключения работают: REALITY, XHTTP и Hysteria2 проверены клиентом с самого сервера"\n',
|
||||
False,
|
||||
' ok "подключения работают (проверено клиентом с самого сервера): ${CREATED[*]:-нет}"\n',
|
||||
'авто-шов: replace, строк 1',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' local extra\n extra=$(sub_links "$SUBID-awg" 1; sub_links "$SUBID-tg" 1)\n',
|
||||
@@ -366,6 +380,20 @@ def main():
|
||||
' echo "3X-UI_autoVPS (3X-UI $XUI_VERSION) – данные для входа (файл виден только root)"\n',
|
||||
'авто-шов: replace, строк 1',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' echo "${G}${B}Готово! Сервер работает.${N}"\n [[ -n $DOMAIN ]] && echo "Маскировка: свой домен ${B}$DOMAIN${N}, сертификат Let\'s Encrypt продлевается сам."\n [[ $SELF_IP_CERT == yes ]] && later "Сертификат на IP самоподписанный: пользуйтесь ссылками на отдельные подключения, подписка в приложениях может не открыться."\n echo\n echo "${B}ПАНЕЛЬ${N}"\n if [[ $TRUSTED == yes ]]; then\n echo " $panel_url"\n else\n echo " Только через SSH-туннель. На вашем компьютере:"\n echo " ssh -L $XUI_PANEL_PORT:127.0.0.1:$XUI_PANEL_PORT root@$HOST"\n echo " Затем в браузере: http://127.0.0.1:$XUI_PANEL_PORT/$XUI_WEB_BASE_PATH"\n fi\n echo " Логин: ${B}$XUI_USERNAME${N} Пароль: ${B}$XUI_PASSWORD${N}"\n echo " ${D}(сохранено в $RESULT, файл виден только root)${N}"\n echo\n if [[ $TRUSTED == yes ]]; then\n echo "${B}ПОДПИСКА${N} – одна ссылка для всех протоколов"\n echo " ${B}$SUB_URL${N}"\n echo " Вставьте в Happ, Hiddify, Karing, v2rayN, Clash Verge или FlClash."\n qrencode -t ANSIUTF8 -m 1 "$SUB_URL" || true\n echo\n KIT_NO_QR=1 /usr/local/bin/kit __links "$NAME" "$SUBID" || true\n else\n /usr/local/bin/kit __links "$NAME" "$SUBID" || true\n fi\n echo\n echo "${D}Порты, выключение и включение протоколов: ${N}${B}kit net${N}"\n',
|
||||
False,
|
||||
' echo "${G}${B}Установка завершена.${N} Доступы к панели, подписка и QR-код — в самом конце вывода."\n',
|
||||
'авто-шов: replace, строк 27',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
' fi\n echo\n echo "${B}ДАЛЬШЕ${N}"\n echo " ${B}kit${N} меню управления"\n echo " ${B}kit user add имя --gb 50 --days 30${N} добавить пользователя"\n echo " ${B}kit check --deep${N} проверить, что всё работает"\n echo " ${B}kit backup${N} копия сервера (держите в надёжном месте)"\n',
|
||||
False,
|
||||
' fi\n\n',
|
||||
'авто-шов: replace, строк 7',
|
||||
),
|
||||
(
|
||||
'scripts/3x-ui.sh',
|
||||
'KIT_CLI_URL="$KIT_RAW/scripts/kit.sh"\n',
|
||||
|
||||
Reference in New Issue
Block a user