生产端文件全景
CmdCode-Solo 项目共有 7 个核心文件,分布在服务器和本机两个位置:
一、服务器端(HK 站)
| # | 文件 | 实际地址 | 大小 | 需脱敏 |
| 1 | ui.html | /www/ui.html | 86,910 B | ❌ |
| 2 | proxy.php | /www/cmdcode-minimax-toolset/proxy.php | 67,813 B | ✅ ACCESS_TOKEN / MySQL / IP / 口令 |
| 3 | config.enc.php | /www/cmdcode-minimax-toolset/config.enc.php | 2,599 B | ✅ ENC_PASSPHRASE / 加密密钥 |
| 4 | .htaccess | /www/cmdcode-minimax-toolset/.htaccess | 351 B | ❌ 纯规则 |
二、本机脚本
| # | 文件 | 实际地址 | 大小 | 需脱敏 |
| 5 | long-task-cron-worker.sh | /root/scripts/long-task-cron-worker.sh | 11,351 B | ✅ TOKEN |
| 6 | cron.d-long-task-worker | /etc/cron.d/long-task-worker | 411 B | ❌ |
| 7 | long-task-worker-check.sh | /root/.hermes/scripts/long-task-worker-check.sh | 1,705 B | ❌ |
核心架构
┌─ 生产端(含真实 token)────────────────────────┐
│ │
│ /www/ui.html ← HTTP 公开访问 │
│ /www/cmdcode-minimax-toolset/proxy.php ← 前端调用 │
│ /www/cmdcode-minimax-toolset/config.enc.php │
│ /www/cmdcode-minimax-toolset/.htaccess │
│ /root/scripts/long-task-cron-worker.sh │
│ /etc/cron.d/long-task-worker │
│ /root/.hermes/scripts/long-task-worker-check.sh │
│ │
└──────────────────┬───────────────────────────────┘
│ ① 下载
▼
┌─ 脱敏管道 ──────────────────────────────────────┐
│ sed 替换 ACCESS_TOKEN / MySQL / IP / 口令 │
│ → __YOUR_PROXY_ACCESS_TOKEN__ 等占位符 │
│ grep -c 验证原始值清零 │
│ 归一化 diff 验证代码一致性 │
└──────────────────┬───────────────────────────────┘
│ ② 上传
▼
┌─ 开源 source/ 目录(仅占位符)──────────────────┐
│ │
│ /www/source/ui.html 86,910 B │
│ /www/source/proxy.php 67,734 B │
│ /www/source/config.enc.php 1,966 B │
│ /www/source/htaccess-example 351 B │
│ /www/source/long-task-cron-worker 11,351 B │
│ /www/source/cron.d-long-task-worker 411 B │
│ /www/source/long-task-worker-check 1,705 B │
│ /www/source/index.html(元数据) │
└──────────────────────────────────────────────────┘
HK 站 proxy.php 三路径架构
/www/source/proxy.php ← 唯一开源脱敏版(__YOUR_PROXY_ACCESS_TOKEN__)
/www/proxy.php ← 生产版(根目录镜像,真实 token)
/www/cmdcode-minimax-toolset/proxy.php ← 生产版(前端实际调用,真实 token)
关键原则:脱敏版只上传到 /www/source/proxy.php,绝不上传到 /www/proxy.php(那是生产版)。
完整同步流程
Step 1:获取生产文件
mkdir -p /tmp/cmdcode-sync
# 服务器文件(FTP)
lftp -u host0012314959,Xusu8800033 host0012314959.xincache1.cn \
-e "set xfer:clobber on; \
get /www/cmdcode-minimax-toolset/proxy.php -o /tmp/cmdcode-sync/proxy.php; \
get /www/cmdcode-minimax-toolset/config.enc.php -o /tmp/cmdcode-sync/config.enc.php; \
get /www/cmdcode-minimax-toolset/.htaccess -o /tmp/cmdcode-sync/.htaccess; quit"
# ui.html(HTTP 直下)
curl -sL -o /tmp/cmdcode-sync/ui.html 'https://cmdcode.cn/ui.html'
# 本机脚本
cp /root/scripts/long-task-cron-worker.sh /tmp/cmdcode-sync/
cp /etc/cron.d/long-task-worker /tmp/cmdcode-sync/
cp /root/.hermes/scripts/long-task-worker-check.sh /tmp/cmdcode-sync/
Step 2:扫描并脱敏
# proxy.php:替换 7 类敏感信息
sed -i "s|mysql:host=真实值;dbname=真实值|mysql:host=__YOUR_MYSQL_HOST__;dbname=__YOUR_MYSQL_DB__|g"
sed -i "s|'真实MySQL用户'|'__YOUR_MYSQL_USER__'|g"
sed -i "s|'真实MySQL密码'|'__YOUR_MYSQL_PASS__'|g"
sed -i "s|define('ACCESS_TOKEN', '真实值')|define('ACCESS_TOKEN', '__YOUR_PROXY_ACCESS_TOKEN__')|g"
sed -i "s|echo json_encode(['token' => '真实值'])|echo json_encode(['token' => '__YOUR_PROXY_TOKEN__'])|g"
sed -i "s|'加密口令'|'__YOUR_ENCRYPTION_PASSPHRASE__'|g"
sed -i "s|\['真实IP', '127.0.0.1'\]|['__YOUR_ALLOWED_IP__']|g"
# config.enc.php:替换 PASSPHRASE + 加密密钥
sed -i "s|'真实PASSPHRASE'|'__YOUR_RANDOM_SECRET_HERE__'|g"
sed -i "s|decrypt_key('...')|decrypt_key('__YOUR_ENCRYPTED_KEY_HERE__')|g"
# long-task-cron-worker.sh:替换 TOKEN
sed -i "s|TOKEN=\"真实值\"|TOKEN=\"__YOUR_PROXY_ACCESS_TOKEN__\"|g"
Step 3:验证脱敏完整性
# 原始值必须清零
for val in 'token片段' '密码' 'IP'; do
grep -c "$val" sanitized.php || echo "OK"
done
# 占位符必须存在
grep -c '__YOUR_' proxy_sanitized.php # 应为 12
grep -c '__YOUR_' config_sanitized.php # 应为 5
Step 4:归一化 diff 验证
# 占位符→真实值反替换
cp proxy_sanitized.php normalized.php
sed -i 's|__YOUR_PROXY_ACCESS_TOKEN__|真实值|g' ...
# diff 必须为 0
diff normalized.php proxy.php
echo "exit: $? (0=代码一致)"
Step 5:上传到两站 source/ 目录
# HK 站
echo "open host0012314959.xincache1.cn
user host0012314959 Xusu8800033
set net:timeout 90
set ftp:passive-mode on
set xfer:clobber on
cd /www/source
put ui.html -o ui.html
put proxy_sanitized.php -o proxy.php
put config_sanitized.php -o config.enc.php
put .htaccess -o htaccess-example
put cron_worker_sanitized.sh -o long-task-cron-worker.sh
put cron_d_sanitized -o cron.d-long-task-worker
put check_worker_sanitized.sh -o long-task-worker-check.sh
bye" | lftp
# 全球站(加 GBK charset)
echo "open host9309191354.xincache1.cn
user host9309191354 Xusu8800033
set ftp:charset GBK
...(同上)
bye" | lftp
Step 6:更新 source/index.html 元数据
# 获取文件新大小
for f in ui.html proxy_sanitized.php config_sanitized.php ...; do
echo "$f: $(wc -c < /tmp/cmdcode-sync/$f) bytes"
done
# patch 修改 meta 行后上传两站
Step 7:验证
# 两站 7 个文件大小一致
# 生产版仍正常运行
curl -sL -X POST 'https://cmdcode.cn/cmdcode-minimax-toolset/...?\
_action=get_proxy_token'
# → {"token": "a6f167...00bd"}
# source/index.html 元数据显示
curl -sL 'https://cmdcode.cn/source/' | grep -oP '\d+,\d+ bytes'
预期文件大小对照表
| source/ 文件名 | 脱敏后大小 | 说明 |
| ui.html | 86,910 B | 不变,无敏感信息 |
| proxy.php | 67,734 B | 脱敏后略小于生产版 |
| config.enc.php | 1,966 B | 脱敏后大幅缩小 |
| htaccess-example | 351 B | 不变 |
| long-task-cron-worker.sh | 11,351 B | 脱敏后变小 |
| cron.d-long-task-worker | 411 B | 不变 |
| long-task-worker-check.sh | 1,705 B | 不变 |
常见陷阱
- lftp xfer:clobber 默认为 off — 不加会静默跳过下载!
- 全球站 Windows IIS — 不支持多文件 ls,每个文件单独查;需
set ftp:charset GBK
- PHP 文件 HTTP 访问会被执行 — 必须走 FTP 或 v.php 阅读器查看源码
- 脱敏后必须 grep -c 验证 — 遗漏的 token 会直接公开到开源目录
- 脱敏版只传 source/ — 绝不传
/www/proxy.php(那是生产版)
- long-task-cron-worker.sh 的 TOKEN 是完整 32 位 hex — sed 替换时需要精确匹配完整字符串