update hy2.sh

This commit is contained in:
2026-03-19 16:15:15 +08:00
parent 7786a3e8ac
commit 79a2ad8e78

36
hy2.sh
View File

@@ -24,6 +24,12 @@ require_cmd() {
}
}
require_python3_json() {
python3 - <<'PY' >/dev/null 2>&1
import json
PY
}
random_subdomain_prefix() {
openssl rand -hex 8 | cut -c1-8
}
@@ -113,7 +119,7 @@ get_server_ip() {
}
apt_update_and_install_base() {
if ! confirm_yn "即将执行 apt update 并安装基础依赖 curl sed ufw openssl是否继续"; then
if ! confirm_yn "即将执行 apt update 并安装基础依赖 curl sed ufw openssl python3,是否继续?"; then
red "已取消。"
exit 1
fi
@@ -126,7 +132,7 @@ apt_update_and_install_base() {
blue "==> 安装基础依赖"
wait_for_apt_lock 300 || { red "APT 被占用,无法继续。"; exit 1; }
apt install -y curl sed ufw openssl
apt install -y curl sed ufw openssl python3
}
disable_existing_firewalls() {
@@ -250,10 +256,30 @@ cf_api_request() {
fi
}
cf_extract_zone_id() {
python3 -c '
import json, sys
data = json.load(sys.stdin)
result = data.get("result") or []
if result and isinstance(result[0], dict):
print(result[0].get("id", ""), end="")
'
}
cf_extract_dns_record_id() {
python3 -c '
import json, sys
data = json.load(sys.stdin)
result = data.get("result") or []
if result and isinstance(result[0], dict):
print(result[0].get("id", ""), end="")
'
}
get_cf_zone_id() {
local zone="$1"
cf_api_request GET "https://api.cloudflare.com/client/v4/zones?name=${zone}" \
| sed -n 's/.*"id":"\([^"]*\)".*/\1/p' | head -n 1
| cf_extract_zone_id
}
delete_existing_cf_dns_record() {
@@ -264,7 +290,7 @@ delete_existing_cf_dns_record() {
record_id="$(
cf_api_request GET "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records?name=${full_domain}&type=${type}" \
| sed -n 's/.*"id":"\([^"]*\)".*/\1/p' | head -n 1
| cf_extract_dns_record_id
)"
if [[ -n "$record_id" ]]; then
@@ -480,6 +506,8 @@ main() {
require_cmd systemctl
require_cmd ufw
require_cmd openssl
require_cmd python3
require_python3_json || { red "python3 缺少 json 模块,无法解析 Cloudflare API 返回值。"; exit 1; }
local email zone subdomain proxy_url password ip_info ipv4 ipv6 domain