diff --git a/scripts/generate-keys.sh b/scripts/generate-keys.sh index 1da5087..7f8d936 100644 --- a/scripts/generate-keys.sh +++ b/scripts/generate-keys.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# 生成 Reality 密钥与面板登录密码,写入 .env +# 生成 Reality 密钥;若 .env 无面板密码则一并生成 set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" @@ -23,20 +23,32 @@ else fi KEYPAIR="$("$SB" generate reality-keypair)" -PRIVATE_KEY="$(echo "$KEYPAIR" | grep 'PrivateKey:' | awk '{print $2}')" -PUBLIC_KEY="$(echo "$KEYPAIR" | grep 'PublicKey:' | awk '{print $2}')" -SHORT_ID="$("$SB" generate rand --hex 8)" -PANEL_PASSWORD="$("$SB" generate rand --base64 32 | tr -d '/+=' | head -c 20)" +REALITY_PRIVATE_KEY="$(echo "$KEYPAIR" | grep 'PrivateKey:' | awk '{print $2}')" +REALITY_PUBLIC_KEY="$(echo "$KEYPAIR" | grep 'PublicKey:' | awk '{print $2}')" +REALITY_SHORT_ID="$("$SB" generate rand --hex 8)" + +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 "REALITY_PRIVATE_KEY: $PRIVATE_KEY" -echo "REALITY_PUBLIC_KEY: $PUBLIC_KEY" -echo "REALITY_SHORT_ID: $SHORT_ID" -echo "PANEL_PASSWORD: $PANEL_PASSWORD" +echo "REALITY_PRIVATE_KEY: $REALITY_PRIVATE_KEY" +echo "REALITY_PUBLIC_KEY: $REALITY_PUBLIC_KEY" +echo "REALITY_SHORT_ID: $REALITY_SHORT_ID" +if (( GENERATE_PANEL_PASSWORD )); then + echo "PANEL_PASSWORD: $PANEL_PASSWORD" +else + echo "PANEL_PASSWORD: (保留 .env 中已有密码,未重新生成)" +fi echo "================================" 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}" if grep -q "^${var}=" "$ENV_FILE" 2>/dev/null; then sed -i "s|^${var}=.*|${var}=${val}|" "$ENV_FILE" @@ -44,8 +56,15 @@ if [[ -f "$ENV_FILE" ]]; then echo "${var}=${val}" >> "$ENV_FILE" fi 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 - echo "PANEL_USERNAME=admin" >> "$ENV_FILE" + echo "PANEL_USERNAME=dekun" >> "$ENV_FILE" fi echo "已写入 $ENV_FILE" else