Files
cellular-proxy/scripts/apply-proxy-auth.sh
T
Hermes ccace51535 feat: 增量升级路径 --upgrade / --ui-only
- 已装机器默认自动走升级,保留 secret/网卡/账密
- 默认不重下 sing-box、不 rebind、不 verify
- scripts/upgrade.sh + install.sh 入口 + README
2026-07-21 12:48:00 +00:00

143 lines
4.2 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 设置/清除代理账号密码,写 settings → 重生 config → 重启服务
# 用法:
# apply-proxy-auth.sh --user U --pass P
# apply-proxy-auth.sh --clear
# apply-proxy-auth.sh --show
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=lib.sh
source "$ROOT_DIR/scripts/lib.sh"
ACTION=set
USER_V=""
PASS_V=""
usage() {
cat <<'H'
apply-proxy-auth.sh — 配置 7890 代理鉴权
--user NAME 代理用户名
--pass PASS 代理密码
--clear 清除鉴权(无密码)
--show 仅显示当前状态(密码脱敏)
-h|--help
H
}
while [[ $# -gt 0 ]]; do
case "$1" in
--user) USER_V="${2:-}"; shift 2 ;;
--pass) PASS_V="${2:-}"; shift 2 ;;
--clear) ACTION=clear; shift ;;
--show) ACTION=show; shift ;;
-h|--help) usage; exit 0 ;;
*) die "未知参数: $1" ;;
esac
done
# 优先已安装配置
if [[ -f "${INSTALL_DIR:-/opt/cellular-proxy}/etc/settings.conf" ]]; then
CONFIG_FILE="${INSTALL_DIR:-/opt/cellular-proxy}/etc/settings.conf"
SETTINGS_DIR="$(dirname "$CONFIG_FILE")"
elif [[ -f "$ROOT_DIR/config/settings.conf" ]]; then
CONFIG_FILE="$ROOT_DIR/config/settings.conf"
SETTINGS_DIR="$(dirname "$CONFIG_FILE")"
else
die "找不到 settings.conf(请先安装)"
fi
set_kv() {
local file="$1" key="$2" val="$3"
local tmp
tmp="$(mktemp)"
awk -v k="$key" -v v="$val" '
BEGIN { done=0 }
index($0, k "=")==1 { print k "=" v; done=1; next }
{ print }
END { if (!done) print k "=" v }
' "$file" > "$tmp"
mv "$tmp" "$file"
}
load_config
INSTALL_DIR="${INSTALL_DIR:-/opt/cellular-proxy}"
mask() {
local s="$1" n=${#1}
if [[ $n -le 2 ]]; then echo "***"; else echo "${s:0:1}***${s: -1}"; fi
}
if [[ "$ACTION" == "show" ]]; then
echo "settings: $CONFIG_FILE"
echo "PROXY_USER=${PROXY_USER:-<empty>}"
if [[ -n "${PROXY_PASS:-}" ]]; then
echo "PROXY_PASS=$(mask "$PROXY_PASS") (已设置)"
else
echo "PROXY_PASS=<empty> (无鉴权)"
fi
exit 0
fi
need_root
if [[ "$ACTION" == "clear" ]]; then
set_kv "$CONFIG_FILE" PROXY_USER ""
set_kv "$CONFIG_FILE" PROXY_PASS ""
info "已清除代理账号密码"
else
[[ -n "$USER_V" ]] || die "请指定 --user(或用 --clear"
[[ -n "$PASS_V" ]] || die "请指定 --pass"
set_kv "$CONFIG_FILE" PROXY_USER "$USER_V"
set_kv "$CONFIG_FILE" PROXY_PASS "$PASS_V"
info "已写入 PROXY_USER=$USER_V"
fi
# 同步到安装树副本
if [[ -f "$INSTALL_DIR/etc/settings.conf" && "$CONFIG_FILE" != "$INSTALL_DIR/etc/settings.conf" ]]; then
install -m 0644 "$CONFIG_FILE" "$INSTALL_DIR/etc/settings.conf"
fi
# 若改的是安装目录,也尽量同步源树
if [[ -d "$ROOT_DIR/config" && "$CONFIG_FILE" == "$INSTALL_DIR/etc/settings.conf" ]]; then
install -m 0644 "$CONFIG_FILE" "$ROOT_DIR/config/settings.conf" 2>/dev/null || true
fi
export CONFIG_FILE
# generate 需要能 load 到最新 settings
if [[ -x "$INSTALL_DIR/scripts/generate.sh" ]]; then
GEN="$INSTALL_DIR/scripts/generate.sh"
OUT="$INSTALL_DIR/generated"
elif [[ -x "$ROOT_DIR/scripts/generate.sh" ]]; then
GEN="$ROOT_DIR/scripts/generate.sh"
OUT="${INSTALL_DIR}/generated"
mkdir -p "$OUT"
else
die "找不到 generate.sh"
fi
info "重新生成 sing-box 配置…"
"$GEN" "$OUT"
install -m 0644 "$OUT/config.json" "$INSTALL_DIR/etc/config.json"
install -m 0644 "$OUT/runtime.env" "$INSTALL_DIR/etc/runtime.env" 2>/dev/null || true
install -m 0644 "$CONFIG_FILE" "$INSTALL_DIR/etc/settings.conf"
if systemctl is-enabled cellular-proxy.service >/dev/null 2>&1 || systemctl list-unit-files | grep -q cellular-proxy; then
systemctl restart cellular-proxy.service
sleep 1
if systemctl is-active --quiet cellular-proxy.service; then
info "服务已重启 active"
else
warn "服务未 active,请检查: systemctl status cellular-proxy"
fi
else
warn "未找到 systemd 服务,配置已写好,请手动重启 sing-box"
fi
if [[ "$ACTION" == "clear" ]]; then
echo "当前: 无代理鉴权"
else
echo "当前: 用户 $USER_V / 密码已设置"
echo "HTTP: curl -x http://${USER_V}:****@127.0.0.1:${PROXY_MIXED_PORT:-7890} https://ifconfig.me"
echo "SOCKS: curl --socks5-hostname ${USER_V}:****@127.0.0.1:${PROXY_MIXED_PORT:-7890} https://ifconfig.me"
fi