This commit is contained in:
sindricn
2025-08-07 19:57:33 +08:00
parent b0843a25bc
commit a888b86856
3 changed files with 90 additions and 86 deletions
+2 -41
View File
@@ -319,7 +319,7 @@ uninstall() {
echo -e "${GREEN}卸载完成${NC}"
}
# 改进的确认函数 - 支持管道输入和交互确认
# 简化的确认函数 - 直接安装或交互确认
confirm_installation() {
# 检查是否通过管道运行
if [[ -t 0 ]]; then
@@ -333,46 +333,7 @@ confirm_installation() {
else
# 通过管道运行,检查是否有强制参数
if [[ "$1" != "--force" && "$1" != "-f" ]]; then
echo -e "${YELLOW}检测到通过管道运行脚本${NC}"
echo -e "${BLUE}如需跳过确认,请使用: ${NC}curl -fsSL <url> | sudo bash -s -- --force"
echo ""
echo -e "${YELLOW}请选择操作:${NC}"
echo -e "${GREEN}Y/y${NC} - 立即开始安装"
echo -e "${RED}N/n${NC} - 取消安装"
echo -e "${BLUE}其他键或等待 10 秒${NC} - 自动开始安装"
echo ""
# 倒计时,检测用户输入
local countdown=10
local user_input=""
while [[ $countdown -gt 0 ]]; do
echo -n -e "\r${YELLOW}倒计时: $countdown 秒,请输入选择 [Y/n],或等待自动安装... ${NC}"
# 使用 read 的超时功能检测输入
if read -t 1 -n 1 user_input 2>/dev/null; then
echo ""
case "$user_input" in
[Yy]|$'\n'|"")
echo -e "${GREEN}开始安装...${NC}"
return 0
;;
[Nn])
echo -e "${RED}取消安装${NC}"
exit 0
;;
*)
echo -e "${GREEN}开始安装...${NC}"
return 0
;;
esac
fi
((countdown--))
done
echo ""
echo -e "${GREEN}等待时间到,自动开始安装...${NC}"
echo -e "${YELLOW}检测到通过管道运行脚本,开始安装...${NC}"
else
echo -e "${BLUE}强制模式,跳过确认${NC}"
fi
+61 -6
View File
@@ -83,7 +83,7 @@ configure_acme_mode() {
fi
done
# 输入密码
# 输入认证密码
echo -n -e "${BLUE}请输入认证密码 (留空自动生成): ${NC}"
read -r password
if [[ -z "$password" ]]; then
@@ -91,6 +91,28 @@ configure_acme_mode() {
echo -e "${GREEN}自动生成密码: $password${NC}"
fi
# 询问是否启用混淆
echo ""
echo -n -e "${BLUE}是否启用混淆功能? [Y/n]: ${NC}"
read -r enable_obfs
local obfs_config=""
if [[ ! $enable_obfs =~ ^[Nn]$ ]]; then
echo -n -e "${BLUE}请输入混淆密码 (留空自动生成): ${NC}"
read -r obfs_password
if [[ -z "$obfs_password" ]]; then
obfs_password=$(generate_password 16)
echo -e "${GREEN}自动生成混淆密码: $obfs_password${NC}"
fi
obfs_config="
obfs:
type: salamander
salamander:
password: $obfs_password"
fi
# 选择伪装网站
echo ""
echo -e "${BLUE}选择伪装网站:${NC}"
@@ -136,7 +158,7 @@ acme:
auth:
type: password
password: $password
password: $password$obfs_config
masquerade:
type: proxy
@@ -149,7 +171,13 @@ EOF
echo -e "${GREEN}ACME 配置文件生成成功!${NC}"
echo -e "${YELLOW}域名: $domain${NC}"
echo -e "${YELLOW}邮箱: $email${NC}"
echo -e "${YELLOW}密码: $password${NC}"
echo -e "${YELLOW}认证密码: $password${NC}"
if [[ -n "$obfs_password" ]]; then
echo -e "${YELLOW}混淆密码: $obfs_password${NC}"
echo -e "${YELLOW}混淆类型: Salamander${NC}"
else
echo -e "${YELLOW}混淆功能: 未启用${NC}"
fi
echo -e "${YELLOW}伪装网站: $masquerade_url${NC}"
}
@@ -194,7 +222,7 @@ configure_self_cert_mode() {
;;
esac
# 输入密码
# 输入认证密码
echo -n -e "${BLUE}请输入认证密码 (留空自动生成): ${NC}"
read -r password
if [[ -z "$password" ]]; then
@@ -202,6 +230,27 @@ configure_self_cert_mode() {
echo -e "${GREEN}自动生成密码: $password${NC}"
fi
# 询问是否启用混淆
echo ""
echo -n -e "${BLUE}是否启用混淆功能? [Y/n]: ${NC}"
read -r enable_obfs
local obfs_config=""
if [[ ! $enable_obfs =~ ^[Nn]$ ]]; then
echo -n -e "${BLUE}请输入混淆密码 (留空自动生成): ${NC}"
read -r obfs_password
if [[ -z "$obfs_password" ]]; then
obfs_password=$(generate_password 16)
echo -e "${GREEN}自动生成混淆密码: $obfs_password${NC}"
fi
obfs_config="
obfs:
type: salamander
salamander:
password: $obfs_password"
fi
# 生成自签名证书
echo -e "${BLUE}生成自签名证书...${NC}"
mkdir -p /etc/hysteria
@@ -231,7 +280,7 @@ tls:
auth:
type: password
password: $password
password: $password$obfs_config
masquerade:
type: proxy
@@ -243,7 +292,13 @@ EOF
echo ""
echo -e "${GREEN}自签名证书配置生成成功!${NC}"
echo -e "${YELLOW}证书域名: $cert_domain${NC}"
echo -e "${YELLOW}密码: $password${NC}"
echo -e "${YELLOW}认证密码: $password${NC}"
if [[ -n "$obfs_password" ]]; then
echo -e "${YELLOW}混淆密码: $obfs_password${NC}"
echo -e "${YELLOW}混淆类型: Salamander${NC}"
else
echo -e "${YELLOW}混淆功能: 未启用${NC}"
fi
echo -e "${YELLOW}伪装网站: $masquerade_url${NC}"
}
+27 -39
View File
@@ -280,21 +280,6 @@ bandwidth:
EOF
}
# 生成二维码 (如果有 qrencode)
generate_qrcode() {
local content="$1"
if command -v qrencode &> /dev/null; then
echo -e "${BLUE}二维码:${NC}"
qrencode -t ANSIUTF8 "$content"
echo ""
else
echo -e "${YELLOW}提示: 安装 qrencode 可生成二维码${NC}"
echo "Ubuntu/Debian: sudo apt install qrencode"
echo "CentOS/RHEL: sudo yum install qrencode"
echo ""
fi
}
# 显示节点信息
display_node_info() {
@@ -402,13 +387,10 @@ show_node_links() {
echo "$node_link"
echo ""
# 生成二维码
generate_qrcode "$node_link"
echo -e "${BLUE}使用说明:${NC}"
echo "• 复制上方链接到支持 Hysteria2 的客户端"
echo "• 或使用手机扫描二维码快速导入"
echo "• 推荐客户端:v2rayNG (Android)、ShadowRocket (iOS)"
echo "• 也可以手动输入到客户端的添加节点功能中"
echo ""
wait_for_user
@@ -428,32 +410,38 @@ show_subscription_info() {
echo -e "${CYAN}=== 订阅信息 ===${NC}"
echo ""
# Hysteria2 订阅 URL
local hysteria2_sub_url="data:text/plain;charset=utf-8;base64,$(echo "$node_link" | base64 -w 0)"
echo -e "${YELLOW}1. Hysteria2 订阅 URL:${NC}"
echo "$hysteria2_sub_url"
# 通用订阅链接 (Base64)
local universal_sub_content=$(echo "$node_link" | base64 -w 0)
echo -e "${YELLOW}1. 通用订阅链接 (Base64):${NC}"
echo "$universal_sub_content"
echo ""
# Base64 编码的订阅内容
local hysteria2_sub_content=$(echo "$node_link" | base64 -w 0)
echo -e "${YELLOW}2. Hysteria2 订阅内容 (Base64):${NC}"
echo "$hysteria2_sub_content"
# Clash 订阅链接
local clash_config=$(generate_clash_config "$server_address" "$port" "$auth_password" "$obfs_password" "$sni_domain" "$insecure")
local clash_sub_content=$(echo "$clash_config" | base64 -w 0)
echo -e "${YELLOW}2. Clash 订阅内容:${NC}"
echo "$clash_sub_content"
echo ""
# 生成订阅二维码
echo -e "${YELLOW}3. 订阅二维码:${NC}"
generate_qrcode "$hysteria2_sub_url"
echo -e "${BLUE}订阅使用方法:${NC}"
echo "• 方式1:复制 '订阅 URL' 到客户端的订阅功能中"
echo "• 方式2:手机扫描二维码添加订阅"
echo "• 方式3:手动输入 'Base64 内容' 到客户端"
# SingBox 订阅链接
local singbox_config=$(generate_singbox_config "$server_address" "$port" "$auth_password" "$obfs_password" "$sni_domain" "$insecure")
local singbox_sub_content=$(echo "$singbox_config" | base64 -w 0)
echo -e "${YELLOW}3. SingBox 订阅内容:${NC}"
echo "$singbox_sub_content"
echo ""
echo -e "${BLUE}订阅使用说明:${NC}"
echo "• 通用订阅:适用于大部分支持 Hysteria2 的客户端"
echo "• Clash 订阅:专门用于 Clash 系列客户端"
echo "• SingBox 订阅:专门用于 SingBox 客户端"
echo ""
echo -e "${BLUE}使用方法:${NC}"
echo "• 复制对应的订阅内容到客户端的订阅功能中"
echo "• 或者将订阅内容保存为文件导入客户端"
echo ""
echo -e "${BLUE}支持订阅的客户端:${NC}"
echo "• v2rayNG (Android) - 推荐"
echo "• Clash Verge Rev (桌面端)"
echo "• ShadowRocket (iOS)"
echo "• NekoBox/NekoRay"
echo "• 通用订阅:v2rayNG (Android)、ShadowRocket (iOS)"
echo "• Clash 订阅:Clash Verge Rev、ClashX Pro"
echo "• SingBox 订阅:SingBox 官方客户端"
echo ""
wait_for_user