fix: generate-keys variable names and preserve existing panel password

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-16 09:29:09 +08:00
parent 00aea352bc
commit 30e43cc9ce
+30 -11
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 生成 Reality 密钥与面板登录密码,写入 .env # 生成 Reality 密钥;若 .env 无面板密码则一并生成
set -euo pipefail set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -23,20 +23,32 @@ else
fi fi
KEYPAIR="$("$SB" generate reality-keypair)" KEYPAIR="$("$SB" generate reality-keypair)"
PRIVATE_KEY="$(echo "$KEYPAIR" | grep 'PrivateKey:' | awk '{print $2}')" REALITY_PRIVATE_KEY="$(echo "$KEYPAIR" | grep 'PrivateKey:' | awk '{print $2}')"
PUBLIC_KEY="$(echo "$KEYPAIR" | grep 'PublicKey:' | awk '{print $2}')" REALITY_PUBLIC_KEY="$(echo "$KEYPAIR" | grep 'PublicKey:' | awk '{print $2}')"
SHORT_ID="$("$SB" generate rand --hex 8)" REALITY_SHORT_ID="$("$SB" generate rand --hex 8)"
PANEL_PASSWORD="$("$SB" generate rand --base64 32 | tr -d '/+=' | head -c 20)"
GENERATE_PANEL_PASSWORD=1
if [[ -f "$ENV_FILE" ]] && grep -q "^PANEL_PASSWORD=.\+" "$ENV_FILE" 2>/dev/null; then
GENERATE_PANEL_PASSWORD=0
PANEL_PASSWORD="$(grep "^PANEL_PASSWORD=" "$ENV_FILE" | cut -d= -f2-)"
fi
if (( GENERATE_PANEL_PASSWORD )); then
PANEL_PASSWORD="$("$SB" generate rand --base64 32 | tr -d '/+=' | head -c 20)"
fi
echo "========== 生成的密钥 ==========" echo "========== 生成的密钥 =========="
echo "REALITY_PRIVATE_KEY: $PRIVATE_KEY" echo "REALITY_PRIVATE_KEY: $REALITY_PRIVATE_KEY"
echo "REALITY_PUBLIC_KEY: $PUBLIC_KEY" echo "REALITY_PUBLIC_KEY: $REALITY_PUBLIC_KEY"
echo "REALITY_SHORT_ID: $SHORT_ID" echo "REALITY_SHORT_ID: $REALITY_SHORT_ID"
echo "PANEL_PASSWORD: $PANEL_PASSWORD" if (( GENERATE_PANEL_PASSWORD )); then
echo "PANEL_PASSWORD: $PANEL_PASSWORD"
else
echo "PANEL_PASSWORD: (保留 .env 中已有密码,未重新生成)"
fi
echo "================================" echo "================================"
if [[ -f "$ENV_FILE" ]]; then if [[ -f "$ENV_FILE" ]]; then
for var in REALITY_PRIVATE_KEY REALITY_PUBLIC_KEY REALITY_SHORT_ID PANEL_PASSWORD; do for var in REALITY_PRIVATE_KEY REALITY_PUBLIC_KEY REALITY_SHORT_ID; do
val="${!var}" val="${!var}"
if grep -q "^${var}=" "$ENV_FILE" 2>/dev/null; then if grep -q "^${var}=" "$ENV_FILE" 2>/dev/null; then
sed -i "s|^${var}=.*|${var}=${val}|" "$ENV_FILE" sed -i "s|^${var}=.*|${var}=${val}|" "$ENV_FILE"
@@ -44,8 +56,15 @@ if [[ -f "$ENV_FILE" ]]; then
echo "${var}=${val}" >> "$ENV_FILE" echo "${var}=${val}" >> "$ENV_FILE"
fi fi
done done
if (( GENERATE_PANEL_PASSWORD )); then
if grep -q "^PANEL_PASSWORD=" "$ENV_FILE" 2>/dev/null; then
sed -i "s|^PANEL_PASSWORD=.*|PANEL_PASSWORD=${PANEL_PASSWORD}|" "$ENV_FILE"
else
echo "PANEL_PASSWORD=${PANEL_PASSWORD}" >> "$ENV_FILE"
fi
fi
if ! grep -q "^PANEL_USERNAME=" "$ENV_FILE" 2>/dev/null; then if ! grep -q "^PANEL_USERNAME=" "$ENV_FILE" 2>/dev/null; then
echo "PANEL_USERNAME=admin" >> "$ENV_FILE" echo "PANEL_USERNAME=dekun" >> "$ENV_FILE"
fi fi
echo "已写入 $ENV_FILE" echo "已写入 $ENV_FILE"
else else