重构代码, 将变量改为大写
This commit is contained in:
+30
-30
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
|
|
||||||
create_acme_tls_config() {
|
create_acme_tls_config() {
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local config_dir="$script_dir/../config"
|
local CONFIG_DIR="$SCRIPT_DIR/../config"
|
||||||
local config_file="$config_dir/config.json"
|
local CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
cp "$config_dir/template/tuic/tuic_acme_tls_config.json" "$config_file"
|
cp "$CONFIG_DIR/template/tuic/tuic_acme_tls_config.json" "$CONFIG_FILE"
|
||||||
|
|
||||||
# 设置端口
|
# 设置端口
|
||||||
update_port
|
update_port
|
||||||
@@ -18,39 +18,39 @@ create_acme_tls_config() {
|
|||||||
update_uuid
|
update_uuid
|
||||||
|
|
||||||
# 获取邮箱
|
# 获取邮箱
|
||||||
local user_email
|
local USER_EMAIL
|
||||||
read -p "请输入你的邮箱(可留空): " user_email
|
read -p "请输入你的邮箱(可留空): " USER_EMAIL
|
||||||
if [[ -z "$user_email" ]]; then
|
if [[ -z "$USER_EMAIL" ]]; then
|
||||||
user_email="example@example.com"
|
USER_EMAIL="example@example.com"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 获取域名
|
# 获取域名
|
||||||
local user_domain
|
local USER_DOMAIN
|
||||||
read -p "请输入你的域名 (例如: example.com): " user_domain
|
read -p "请输入你的域名 (例如: example.com): " USER_DOMAIN
|
||||||
while [[ -z "$user_domain" ]]; do
|
while [[ -z "$USER_DOMAIN" ]]; do
|
||||||
echo "[错误] 域名不能为空"
|
echo "[错误] 域名不能为空"
|
||||||
read -p "请输入你的域名: " user_domain
|
read -p "请输入你的域名: " USER_DOMAIN
|
||||||
done
|
done
|
||||||
|
|
||||||
# 获取 Cloudflare API Token
|
# 获取 Cloudflare API Token
|
||||||
local cloudflare_token
|
local CLOUDFLARE_TOKEN
|
||||||
read -p "请输入你的 Cloudflare API Token: " cloudflare_token
|
read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
|
||||||
while [[ -z "$cloudflare_token" ]]; do
|
while [[ -z "$CLOUDFLARE_TOKEN" ]]; do
|
||||||
echo "[错误] Cloudflare API Token 不能为空"
|
echo "[错误] Cloudflare API Token 不能为空"
|
||||||
read -p "请输入你的 Cloudflare API Token: " cloudflare_token
|
read -p "请输入你的 Cloudflare API Token: " CLOUDFLARE_TOKEN
|
||||||
done
|
done
|
||||||
|
|
||||||
sed -i "s/你的邮箱/$user_email/g" "$config_file"
|
sed -i "s/你的邮箱/$USER_EMAIL/g" "$CONFIG_FILE"
|
||||||
sed -i "s/你的域名/$user_domain/g" "$config_file"
|
sed -i "s/你的域名/$USER_DOMAIN/g" "$CONFIG_FILE"
|
||||||
sed -i "s/你的Cloudflare_API_Token/$cloudflare_token/g" "$config_file"
|
sed -i "s/你的Cloudflare_API_Token/$CLOUDFLARE_TOKEN/g" "$CONFIG_FILE"
|
||||||
|
|
||||||
green "成功创建配置"
|
green "成功创建配置"
|
||||||
}
|
}
|
||||||
|
|
||||||
create_self_tls_config() {
|
create_self_tls_config() {
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
|
|
||||||
cp "$script_dir/../config/template/tuic/tuic_self_tls_config.json" "$script_dir/../config/config.json"
|
cp "$SCRIPT_DIR/../config/template/tuic/tuic_self_tls_config.json" "$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
# 设置端口
|
# 设置端口
|
||||||
update_port
|
update_port
|
||||||
@@ -68,14 +68,14 @@ create_self_tls_config() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_config(){
|
create_config(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local config_file="$script_dir/../config/config.json"
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
# 如果配置文件已存在,提示用户是否重新生成
|
# 如果配置文件已存在,提示用户是否重新生成
|
||||||
if [ -e "$config_file" ]; then
|
if [ -e "$CONFIG_FILE" ]; then
|
||||||
local regenerate
|
local REGENERATE
|
||||||
read -p "检测到配置已存在,是否重新生成配置?(y/n): " regenerate
|
read -p "检测到配置已存在,是否重新生成配置?(y/n): " REGENERATE
|
||||||
if [ "$regenerate" != "y" ] && [ "$regenerate" != "Y" ]; then
|
if [ "$REGENERATE" != "y" ] && [ "$REGENERATE" != "Y" ]; then
|
||||||
echo "取消重新生成配置."
|
echo "取消重新生成配置."
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
@@ -84,9 +84,9 @@ create_config(){
|
|||||||
echo "请选择配置类型:"
|
echo "请选择配置类型:"
|
||||||
echo "1. 自签名证书配置"
|
echo "1. 自签名证书配置"
|
||||||
echo "2. tls证书配置"
|
echo "2. tls证书配置"
|
||||||
local choice
|
local CHOICE
|
||||||
read -p "输入您的选择: " choice
|
read -p "输入您的选择: " CHOICE
|
||||||
case $choice in
|
case $CHOICE in
|
||||||
1)
|
1)
|
||||||
echo "重置为自签名证书配置..."
|
echo "重置为自签名证书配置..."
|
||||||
create_self_tls_config
|
create_self_tls_config
|
||||||
|
|||||||
@@ -2,22 +2,22 @@
|
|||||||
|
|
||||||
# 生成自签名证书
|
# 生成自签名证书
|
||||||
create_self_tls() {
|
create_self_tls() {
|
||||||
local domain="${1:-bing.com}"
|
local DOMAIN="${1:-bing.com}"
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local key_dir="$script_dir/../tls/self-tls"
|
local KEY_DIR="$SCRIPT_DIR/../tls/self-tls"
|
||||||
local config_file="$script_dir/../config/config.json"
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
# 创建存放证书的目录
|
# 创建存放证书的目录
|
||||||
mkdir -p "$key_dir"
|
mkdir -p "$KEY_DIR"
|
||||||
|
|
||||||
# 生成自签名证书
|
# 生成自签名证书
|
||||||
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) \
|
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) \
|
||||||
-keyout "$key_dir/server.key" \
|
-keyout "$KEY_DIR/server.key" \
|
||||||
-out "$key_dir/server.crt" \
|
-out "$KEY_DIR/server.crt" \
|
||||||
-subj "/CN=$domain" \
|
-subj "/CN=$DOMAIN" \
|
||||||
-days 36500
|
-days 36500
|
||||||
|
|
||||||
# 更新config.json文件中的域名信息
|
# 更新config.json文件中的域名信息
|
||||||
modify_json_file "$config_file" "inbounds[0].tls.server_name" "$domain"
|
modify_json_file "$CONFIG_FILE" "inbounds[0].tls.server_name" "$DOMAIN"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-10
@@ -2,32 +2,32 @@
|
|||||||
|
|
||||||
# 修改域名
|
# 修改域名
|
||||||
update_domain(){
|
update_domain(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local config_file="$script_dir/../config/config.json"
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
# 检查jq是否安装
|
# 检查jq是否安装
|
||||||
check_jq
|
check_jq
|
||||||
|
|
||||||
# 获取旧的domain
|
# 获取旧的domain
|
||||||
local old_domain=$(jq -r ".inbounds[0].tls.server_name" "$config_file")
|
local OLD_DOMAIN=$(jq -r ".inbounds[0].tls.server_name" "$CONFIG_FILE")
|
||||||
|
|
||||||
# 输入新的domain
|
# 输入新的domain
|
||||||
local domain
|
local DOMAIN
|
||||||
read -p "请输入域名[当前域名: $old_domain]: " domain
|
read -p "请输入域名[当前域名: $OLD_DOMAIN]: " DOMAIN
|
||||||
|
|
||||||
# 如果输入为空,退出脚本
|
# 如果输入为空,退出脚本
|
||||||
if [[ -z "$domain" ]]; then
|
if [[ -z "$DOMAIN" ]]; then
|
||||||
echo "输入域名为空,退出脚本"
|
echo "输入域名为空,退出脚本"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 修改server_name
|
# 修改server_name
|
||||||
modify_json_file "$config_file" ".inbounds[0].tls.server_name" "$domain"
|
modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.server_name" "$DOMAIN"
|
||||||
|
|
||||||
# 是否存在acme域名, 存在则修改
|
# 是否存在acme域名, 存在则修改
|
||||||
local acme_exists=$(jq -r 'has("inbounds") and (.inbounds[0] | has("tls")) and (.inbounds[0].tls | has("acme"))' "$config_file")
|
local ACME_EXISTS=$(jq -r 'has("inbounds") and (.inbounds[0] | has("tls")) and (.inbounds[0].tls | has("acme"))' "$CONFIG_FILE")
|
||||||
if [[ "$acme_exists" == "true" ]]; then
|
if [[ "$ACME_EXISTS" == "true" ]]; then
|
||||||
modify_json_file "$config_file" ".inbounds[0].tls.acme.domain[0]" "$domain"
|
modify_json_file "$CONFIG_FILE" ".inbounds[0].tls.acme.domain[0]" "$DOMAIN"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "修改域名成功"
|
echo "修改域名成功"
|
||||||
|
|||||||
+4
-4
@@ -2,15 +2,15 @@
|
|||||||
|
|
||||||
# 更新密码的函数
|
# 更新密码的函数
|
||||||
update_password() {
|
update_password() {
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local config_file="$script_dir/../config/config.json"
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
|
|
||||||
# 生成一个长度为16的随机密码
|
# 生成一个长度为16的随机密码
|
||||||
local new_password=$(gen_password 16)
|
local NEW_PASSWORD=$(gen_password 16)
|
||||||
|
|
||||||
# 修改密码
|
# 修改密码
|
||||||
sed -i 's/你的密码/'"$new_password"'/g' $config_file
|
sed -i 's/你的密码/'"$NEW_PASSWORD"'/g' $CONFIG_FILE
|
||||||
|
|
||||||
echo "设置密码成功"
|
echo "设置密码成功"
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-35
@@ -8,27 +8,27 @@
|
|||||||
# $2: 结束端口(默认 65535)
|
# $2: 结束端口(默认 65535)
|
||||||
# $3: 最大随机尝试次数(默认 100)
|
# $3: 最大随机尝试次数(默认 100)
|
||||||
find_free_port() {
|
find_free_port() {
|
||||||
local start="${1:-10001}"
|
local START="${1:-10001}"
|
||||||
local max="${2:-65535}"
|
local MAX="${2:-65535}"
|
||||||
local attempts="${3:-100}"
|
local ATTEMPTS="${3:-100}"
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# 收集当前正在监听的端口(TCP + UDP)
|
# 收集当前正在监听的端口(TCP + UDP)
|
||||||
# 优先使用 ss,其次 netstat
|
# 优先使用 ss,其次 netstat
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
local used_ports raw
|
local USED_PORTS RAW
|
||||||
if command -v ss >/dev/null 2>&1; then
|
if command -v ss >/dev/null 2>&1; then
|
||||||
# ss 输出示例:
|
# ss 输出示例:
|
||||||
# LISTEN 0 128 0.0.0.0:22
|
# LISTEN 0 128 0.0.0.0:22
|
||||||
raw=$(ss -lntu 2>/dev/null || true)
|
RAW=$(ss -lntu 2>/dev/null || true)
|
||||||
used_ports=$(printf "%s\n" "$raw" \
|
USED_PORTS=$(printf "%s\n" "$RAW" \
|
||||||
| awk '{print $5}' \
|
| awk '{print $5}' \
|
||||||
| sed -E 's/.*[:]//g')
|
| sed -E 's/.*[:]//g')
|
||||||
elif command -v netstat >/dev/null 2>&1; then
|
elif command -v netstat >/dev/null 2>&1; then
|
||||||
# netstat 输出示例:
|
# netstat 输出示例:
|
||||||
# tcp 0 0 0.0.0.0:22
|
# tcp 0 0 0.0.0.0:22
|
||||||
raw=$(netstat -lntu 2>/dev/null || true)
|
RAW=$(netstat -lntu 2>/dev/null || true)
|
||||||
used_ports=$(printf "%s\n" "$raw" \
|
USED_PORTS=$(printf "%s\n" "$RAW" \
|
||||||
| awk '{print $4}' \
|
| awk '{print $4}' \
|
||||||
| sed -E 's/.*[:]//g')
|
| sed -E 's/.*[:]//g')
|
||||||
else
|
else
|
||||||
@@ -40,12 +40,12 @@ find_free_port() {
|
|||||||
# 将已占用端口存入关联数组,便于 O(1) 判断
|
# 将已占用端口存入关联数组,便于 O(1) 判断
|
||||||
# 需要 bash 4+
|
# 需要 bash 4+
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
declare -A used_map
|
declare -A USED_MAP
|
||||||
local p
|
local P
|
||||||
for p in $used_ports; do
|
for P in $USED_PORTS; do
|
||||||
# 过滤非数字字段(如 *、:::)
|
# 过滤非数字字段(如 *、:::)
|
||||||
if [[ $p =~ ^[0-9]+$ ]]; then
|
if [[ $P =~ ^[0-9]+$ ]]; then
|
||||||
used_map["$p"]=1
|
USED_MAP["$P"]=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -53,14 +53,14 @@ find_free_port() {
|
|||||||
# 随机尝试若干次
|
# 随机尝试若干次
|
||||||
# 每次随机生成一个端口,只要未被监听就立即返回
|
# 每次随机生成一个端口,只要未被监听就立即返回
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
local port i
|
local PORT I
|
||||||
for ((i=0; i<attempts; i++)); do
|
for ((I=0; I<ATTEMPTS; I++)); do
|
||||||
# 在 [start, max] 范围内生成随机端口
|
# 在 [start, max] 范围内生成随机端口
|
||||||
port=$(( RANDOM % (max - start + 1) + start ))
|
PORT=$(( RANDOM % (MAX - START + 1) + START ))
|
||||||
|
|
||||||
# 如果端口不在已监听表中,则认为可用
|
# 如果端口不在已监听表中,则认为可用
|
||||||
if [[ -z "${used_map[$port]}" ]]; then
|
if [[ -z "${USED_MAP[$PORT]}" ]]; then
|
||||||
echo "$port"
|
echo "$PORT"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@@ -69,7 +69,7 @@ find_free_port() {
|
|||||||
# 多次随机尝试后仍未找到可用端口
|
# 多次随机尝试后仍未找到可用端口
|
||||||
# 通常意味着端口范围过小或已被大量占用
|
# 通常意味着端口范围过小或已被大量占用
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
echo "Error: no free port found after $attempts random attempts." >&2
|
echo "Error: no free port found after $ATTEMPTS random attempts." >&2
|
||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,34 +172,34 @@ port_manage() {
|
|||||||
# update_port 8080
|
# update_port 8080
|
||||||
# ==========================================
|
# ==========================================
|
||||||
update_port(){
|
update_port(){
|
||||||
local port=$1
|
local PORT=$1
|
||||||
# 如果没有提供端口参数,则自动查找一个随机空闲端口
|
# 如果没有提供端口参数,则自动查找一个随机空闲端口
|
||||||
if [[ -z "$port" ]]; then
|
if [[ -z "$PORT" ]]; then
|
||||||
port=$(find_free_port 5000 15000)
|
PORT=$(find_free_port 5000 15000)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local config_dir="$script_dir/../config"
|
local CONFIG_DIR="$SCRIPT_DIR/../config"
|
||||||
modify_json_file "$config_dir/config.json" ".inbounds[0].listen_port" "$port"
|
modify_json_file "$CONFIG_DIR/config.json" ".inbounds[0].listen_port" "$PORT"
|
||||||
port_manage allow "$port"
|
port_manage allow "$PORT"
|
||||||
echo "设置端口成功"
|
echo "设置端口成功"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 通过交互方式更新端口
|
# 通过交互方式更新端口
|
||||||
ask_update_port(){
|
ask_update_port(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
local config_file="$script_dir/../config/config.json"
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
local current_port=$(get_listen_port)
|
local CURRENT_PORT=$(get_listen_port)
|
||||||
local new_port=$(ask_update "请输入新的端口号" "$current_port")
|
local NEW_PORT=$(ask_update "请输入新的端口号" "$CURRENT_PORT")
|
||||||
update_port "$new_port"
|
update_port "$NEW_PORT"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 获取当前配置的监听端口
|
# 获取当前配置的监听端口
|
||||||
get_listen_port(){
|
get_listen_port(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
local config_file="$script_dir/../config/config.json"
|
local CONFIG_FILE="$SCRIPT_DIR/../config/config.json"
|
||||||
|
|
||||||
local port=$(jq -r ".inbounds[0].listen_port" "$config_file")
|
local PORT=$(jq -r ".inbounds[0].listen_port" "$CONFIG_FILE")
|
||||||
echo $port
|
echo $PORT
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-25
@@ -2,53 +2,53 @@
|
|||||||
|
|
||||||
|
|
||||||
print_share_link() {
|
print_share_link() {
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local config_dir=$(readlink -f "$script_dir/../config")
|
local CONFIG_DIR=$(readlink -f "$SCRIPT_DIR/../config")
|
||||||
|
|
||||||
# 检查jq是否安装
|
# 检查jq是否安装
|
||||||
check_jq
|
check_jq
|
||||||
|
|
||||||
config_file="$config_dir/config.json"
|
CONFIG_FILE="$CONFIG_DIR/config.json"
|
||||||
|
|
||||||
# 检查配置是否正确
|
# 检查配置是否正确
|
||||||
local uuid=$(jq -r '.inbounds[0].users[0].uuid' "$config_file")
|
local UUID=$(jq -r '.inbounds[0].users[0].uuid' "$CONFIG_FILE")
|
||||||
if [ "$uuid" = "你的UUID" ] || [ -z "$uuid" ] || [[ "$uuid" == null ]]; then
|
if [ "$UUID" = "你的UUID" ] || [ -z "$UUID" ] || [[ "$UUID" == null ]]; then
|
||||||
red "error: 配置有误, 请重新生成配置"
|
red "error: 配置有误, 请重新生成配置"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 读取配置文件内容
|
# 读取配置文件内容
|
||||||
local config=$(cat "$config_file")
|
local CONFIG=$(cat "$CONFIG_FILE")
|
||||||
|
|
||||||
# 提取所需信息
|
# 提取所需信息
|
||||||
uuid=$(echo "$config" | jq -r '.inbounds[0].users[0].uuid')
|
UUID=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].uuid')
|
||||||
local sni=$(echo "$config" | jq -r '.inbounds[0].tls.server_name')
|
local SNI=$(echo "$CONFIG" | jq -r '.inbounds[0].tls.server_name')
|
||||||
local ipv4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
|
local IPV4=$(curl -4 -sSL --connect-timeout 3 --retry 2 ip.sb || echo "null")
|
||||||
local port=$(echo "$config" | jq -r '.inbounds[0].listen_port')
|
local PORT=$(echo "$CONFIG" | jq -r '.inbounds[0].listen_port')
|
||||||
local password=$(echo "$config" | jq -r '.inbounds[0].users[0].password')
|
local PASSWORD=$(echo "$CONFIG" | jq -r '.inbounds[0].users[0].password')
|
||||||
local congestion_control=$(echo "$config" | jq -r '.inbounds[0].congestion_control')
|
local CONGESTION_CONTROL=$(echo "$CONFIG" | jq -r '.inbounds[0].congestion_control')
|
||||||
local allowInsecure=1 # 是否跳过证书验证,1表示跳过,0表示不跳过
|
local ALLOW_INSECURE=1 # 是否跳过证书验证,1表示跳过,0表示不跳过
|
||||||
local insecure=1 # 是否允许不安全连接,1表示允许,0表示不允许
|
local INSECURE=1 # 是否允许不安全连接,1表示允许,0表示不允许
|
||||||
|
|
||||||
# 检查是否使用ACME申请证书
|
# 检查是否使用ACME申请证书
|
||||||
if jq -e '.inbounds[0].tls.acme' "$config_dir/config.json" > /dev/null 2>&1; then
|
if jq -e '.inbounds[0].tls.acme' "$CONFIG_DIR/config.json" > /dev/null 2>&1; then
|
||||||
allowInsecure=0 # 不跳过证书验证
|
ALLOW_INSECURE=0 # 不跳过证书验证
|
||||||
insecure=0
|
INSECURE=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 构建分享链接
|
# 构建分享链接
|
||||||
local share_link="tuic://$uuid:$password@$ipv4:$port?sni=$sni&alpn=h3&insecure=$insecure&allowInsecure=$allowInsecure&congestion_control=$congestion_control#Tuic节点"
|
local SHARE_LINK="tuic://$UUID:$PASSWORD@$IPV4:$PORT?sni=$SNI&alpn=h3&insecure=$INSECURE&allowInsecure=$ALLOW_INSECURE&congestion_control=$CONGESTION_CONTROL#Tuic节点"
|
||||||
|
|
||||||
# 输出分享链接
|
# 输出分享链接
|
||||||
echo -e "\033[32m"
|
echo -e "\033[32m"
|
||||||
echo "IPV4: $ipv4"
|
echo "IPV4: $IPV4"
|
||||||
echo "port: $port"
|
echo "port: $PORT"
|
||||||
echo "uuid: $uuid"
|
echo "uuid: $UUID"
|
||||||
echo "password: $password"
|
echo "password: $PASSWORD"
|
||||||
echo "sni: $sni"
|
echo "sni: $SNI"
|
||||||
echo "congestion_control(拥塞控制算法): $congestion_control"
|
echo "congestion_control(拥塞控制算法): $CONGESTION_CONTROL"
|
||||||
echo ""
|
echo ""
|
||||||
echo "分享链接: $share_link"
|
echo "分享链接: $SHARE_LINK"
|
||||||
echo -e "\033[0m"
|
echo -e "\033[0m"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,26 +2,26 @@
|
|||||||
|
|
||||||
|
|
||||||
update_docker_images(){
|
update_docker_images(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../" # 脚本文件绝对路径
|
||||||
local compose_file="$script_dir/../docker-compose.yml" # docker-compose.yml文件路径
|
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml" # docker-compose.yml文件路径
|
||||||
|
|
||||||
# 检查是否存在 docker-compose.yml 文件
|
# 检查是否存在 docker-compose.yml 文件
|
||||||
if [ ! -f $compose_file ]; then
|
if [ ! -f $COMPOSE_FILE ]; then
|
||||||
echo "Error: docker-compose.yml 文件不存在."
|
echo "Error: docker-compose.yml 文件不存在."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "正在关闭容器.."
|
echo "正在关闭容器.."
|
||||||
docker compose -f $compose_file down
|
docker compose -f $COMPOSE_FILE down
|
||||||
|
|
||||||
echo "正在更新镜像.."
|
echo "正在更新镜像.."
|
||||||
docker compose -f $compose_file pull
|
docker compose -f $COMPOSE_FILE pull
|
||||||
|
|
||||||
echo "正在删除未使用的镜像..."
|
echo "正在删除未使用的镜像..."
|
||||||
docker image prune -f
|
docker image prune -f
|
||||||
|
|
||||||
echo "正在启动容器.."
|
echo "正在启动容器.."
|
||||||
docker compose -f $compose_file up -d
|
docker compose -f $COMPOSE_FILE up -d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -1,15 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
run() {
|
run() {
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local compose_file="$script_dir/../docker-compose.yml"
|
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml"
|
||||||
|
|
||||||
# 如果容器已经启动, 则先停止容器
|
# 如果容器已经启动, 则先停止容器
|
||||||
if docker compose -f "$compose_file" ps | grep -q "Up"; then
|
if docker compose -f "$COMPOSE_FILE" ps | grep -q "Up"; then
|
||||||
docker compose -f "$compose_file" down
|
docker compose -f "$COMPOSE_FILE" down
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 启动docker容器
|
# 启动docker容器
|
||||||
docker compose -f "$compose_file" up -d
|
docker compose -f "$COMPOSE_FILE" up -d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,25 +2,25 @@
|
|||||||
|
|
||||||
|
|
||||||
update_docker_images(){
|
update_docker_images(){
|
||||||
local script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
local SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 脚本文件夹绝对路径
|
||||||
local compose_file="$script_dir/../docker-compose.yml" # docker-compose.yml文件路径
|
local COMPOSE_FILE="$SCRIPT_DIR/../docker-compose.yml" # docker-compose.yml文件路径
|
||||||
|
|
||||||
# 检查是否存在 docker-compose.yml 文件
|
# 检查是否存在 docker-compose.yml 文件
|
||||||
if [ ! -f $compose_file ]; then
|
if [ ! -f $COMPOSE_FILE ]; then
|
||||||
echo "Error: docker-compose.yml 文件不存在."
|
echo "Error: docker-compose.yml 文件不存在."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "正在关闭容器.."
|
echo "正在关闭容器.."
|
||||||
docker compose -f $compose_file down
|
docker compose -f $COMPOSE_FILE down
|
||||||
|
|
||||||
echo "正在更新镜像.."
|
echo "正在更新镜像.."
|
||||||
docker compose -f $compose_file pull
|
docker compose -f $COMPOSE_FILE pull
|
||||||
|
|
||||||
echo "正在删除未使用的镜像..."
|
echo "正在删除未使用的镜像..."
|
||||||
docker image prune -f
|
docker image prune -f
|
||||||
|
|
||||||
echo "正在启动容器.."
|
echo "正在启动容器.."
|
||||||
docker compose -f $compose_file up -d
|
docker compose -f $COMPOSE_FILE up -d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user