#!/usr/bin/env bash # ============================================================ # 手动替换加固模板 APK 并立即触发加固任务(多 app 支持) # # 用法: # ./replace_and_run.sh # 不换模板,只触发一次(六个 app 都跑) # ./replace_and_run.sh huangguo /path/xxx.apk # 替换 huangguo 模板,再触发 # ./replace_and_run.sh 91fans /path/xxx.apk # 替换 91fans 模板,再触发 # ./replace_and_run.sh tangguo /path/xxx.apk # 替换 tangguo 模板,再触发 # ./replace_and_run.sh hgmj /path/xxx.apk # 替换 hgmj 模板,再触发 # ./replace_and_run.sh 51dj /path/xxx.apk # 替换 51dj 模板,再触发 # ./replace_and_run.sh hjsq /path/xxx.apk # 替换 hjsq 模板,再触发 # ./replace_and_run.sh -n huangguo /path/xxx.apk # 只替换 huangguo 模板,不触发 # ./replace_and_run.sh -f # 只 follow 远端日志 # # App: # huangguo -> template/hgdj_source.apk (appId=2) # 91fans -> template/jyfans_source.apk (appId=3) # tangguo -> template/tgdj_source.apk (appId=4) # hgmj -> template/hgmj_source.apk (appId=5) # 51dj -> template/51dj_source.apk (appId=6) # hjsq -> template/hjsq_source.apk (appId=7) # ============================================================ set -euo pipefail JIAGU_HOST=root@139.162.47.194 JIAGU_DIR=/root/JiaguTool LOG=$JIAGU_DIR/auto_jiagu.log # app -> 服务器上模板文件名 declare_template() { case "$1" in huangguo) echo "hgdj_source.apk" ;; 91fans) echo "jyfans_source.apk" ;; tangguo) echo "tgdj_source.apk" ;; hgmj) echo "hgmj_source.apk" ;; 51dj) echo "51dj_source.apk" ;; hjsq) echo "hjsq_source.apk" ;; *) echo "" ;; esac } NO_RUN=0 FOLLOW_ONLY=0 APP="" APK="" while [ $# -gt 0 ]; do case "$1" in -n) NO_RUN=1; shift ;; -f) FOLLOW_ONLY=1; shift ;; -h|--help) sed -n '3,22p' "$0"; exit 0 ;; huangguo|91fans|tangguo|hgmj|51dj|hjsq) APP="$1"; shift ;; *) APK="$1"; shift ;; esac done log() { echo "[$(date +'%H:%M:%S')] $*"; } if [ "$FOLLOW_ONLY" -eq 1 ]; then log "→ follow 远端日志(Ctrl+C 退出)" ssh "$JIAGU_HOST" "tail -f $LOG" exit 0 fi # ---------- 替换模板 APK ---------- if [ -n "$APK" ]; then [ -z "$APP" ] && { echo "❌ 提供 APK 时必须先指定 app: huangguo | 91fans | tangguo | hgmj | 51dj | hjsq"; exit 1; } [ ! -f "$APK" ] && { echo "❌ APK 不存在: $APK"; exit 1; } TPL=$(declare_template "$APP") [ -z "$TPL" ] && { echo "❌ 未知 app: $APP"; exit 1; } TEMPLATE=$JIAGU_DIR/template/$TPL SIZE=$(stat -f%z "$APK" 2>/dev/null || stat -c%s "$APK") log "→ [$APP] 上传 $(basename $APK) ($SIZE bytes) → $TEMPLATE" scp -C "$APK" "$JIAGU_HOST:$TEMPLATE" ssh "$JIAGU_HOST" "chmod 600 $TEMPLATE && ls -l $TEMPLATE" fi if [ "$NO_RUN" -eq 1 ]; then log "✓ 只替换模板,不触发(-n)" exit 0 fi # ---------- 触发一次加固(六 app 都跑,由 auto_jiagu.sh 内部循环)---------- log "→ 远端触发 $JIAGU_DIR/auto_jiagu.sh(六 app 依次加固,约 4-6 分钟)" ssh "$JIAGU_HOST" "nohup $JIAGU_DIR/auto_jiagu.sh >/dev/null 2>&1 &" /dev/null || true break fi done log "→ 拉取最终状态" ssh "$JIAGU_HOST" "bash -c ' echo \"----- S3 huangguo/ 最新 -----\" aws s3 ls s3://meirenyu/huangguo/ | grep -v channels/ | tail -3 echo \"\" echo \"----- S3 91fans/ 最新 -----\" aws s3 ls s3://meirenyu/91fans/ | tail -3 echo \"\" echo \"----- S3 tangguo/ 最新 -----\" aws s3 ls s3://meirenyu/tangguo/ | tail -3 echo \"\" echo \"----- S3 hgmj/ 最新 -----\" aws s3 ls s3://meirenyu/hgmj/ | tail -3 echo \"\" echo \"----- S3 51dj/ 最新 -----\" aws s3 ls s3://meirenyu/51dj/ | tail -3 echo \"\" echo \"----- S3 hjsq/ 最新 -----\" aws s3 ls s3://meirenyu/hjsq/ | tail -3 echo \"\" echo \"----- MongoDB link -----\" mongosh \"mongodb://stat_center:v5weEdNvXnJCMr9TeFFm@172.104.52.130:27017,172.104.52.26:27017,172.104.52.242:27017/stat_center?authSource=stat_center&replicaSet=fish0\" --quiet --eval \" db.getCollection(\\\"version\\\").find({appId:{\\\$in:[2,3,4,5,6,7]}}).forEach(d => print(\\\"appId=\\\" + d.appId + \\\" \\\" + d.link[0])); \" '" log "✅ 完成"