mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 18:20:43 +00:00
== 问题 ==
relay/relay.py 第 138 行:
ADMIN_PASSWORD_DEFAULT = "@REVAedu120830"
而且 _tests/ 和 _build/ 下 11 个文件里也写着明文密码。
这个仓库是要推到**公开的 Gitee / EzHub** 的,等于:
git 仓库 = 公开的
管理页路径 /zhongzhuanzhan = 公开的(就写在代码里)
公网地址 = 公开的
密码 = 也在仓库里
**= 把管理台的门钥匙挂在门上。**
而且 git 历史删不掉 —— 只是在最新提交里删掉没用,
读过仓库的人已经从历史里拿到了。
== 修法 ==
### 1. 代码里不再有任何固定密码
relay.py 的 admin_password() 改成和 admin_key 一样的做法:
环境变量 RELAY_ADMIN_PASSWORD
-> data/admin_password.txt(600 权限,不进仓库)
-> 都没有就**首次启动随机生成**,写进那个文件并打印一次
这样全新部署的密码天然是随机的、每台不同。
### 2. 11 个文件里的明文密码清掉
_tests/ acceptance.py, test_relay_admin_login.py,
test_admin_batch_delete.py, test_admin_button.py,
test_admin_device_control.py, test_admin_js.py,
test_admin_netcheck.py
_build/ check_web.sh, verify_site_admin.sh,
split_site_admin2.py, test_response_headers.py
统一改成从 RELAY_ADMIN_PASSWORD 环境变量读,
拿不到就从部署的 data/admin_password.txt 读,
再拿不到就**跳过需要登录的用例**(而不是编个假密码硬试)。
### 3. 真机上的密码已经轮换
设备上的 data/admin_password.txt 已换成用户指定的新密码,
并实测:
✓ 新密码能登录(HTTP 302 + lr_admin cookie)
✓ 老密码登不上了
✓ 新密码无换行(printf 不带 \n,免得读出来多一个字符)
顺带:重启中断了 relay-stability 的 A/B 对照 A 组(69 个样本),
分析数据时会标注这一段。
== 新增测试 ==
_tests/test_admin_password_gen.py 验证六件事:
1. 全新部署会生成随机密码(不是那个老密码)
2. 密码长度 >= 12、纯字母数字
3. 用生成的密码能登录管理页
4. **老密码登不进去**
5. 重启后密码不变(从文件读回来)
6. **两次全新部署的密码不一样**(真的是随机的)
== 还没做的(等用户决定)==
git **历史**里还有那个密码。要彻底清掉得重写历史 + 强制推送,
这是个危险操作,按用户的规矩必须他确认之后才做。
而且**光删历史不够** —— 密码已经公开过,必须换(已换)。
59 lines
2.3 KiB
Bash
59 lines
2.3 KiB
Bash
#!/bin/bash
|
|
# A/B 长测状态检查
|
|
set -u
|
|
|
|
L=${1:-A}
|
|
|
|
echo "════════ 进程 ════════"
|
|
pgrep -af 'rpab.sh' | sed 's/^/ /' || echo " (没有在跑)"
|
|
|
|
echo
|
|
echo "════════ $L 组数据 ════════"
|
|
for kind in health conns res; do
|
|
f=/root/ab_${L}_${kind}.tsv
|
|
if [ -f "$f" ]; then
|
|
echo " $f: $(wc -l < "$f") 行"
|
|
else
|
|
echo " $f: 不存在"
|
|
fi
|
|
done
|
|
|
|
echo
|
|
echo " ── 健康样本 ──"
|
|
if [ -f /root/ab_${L}_health.tsv ]; then
|
|
n=$(grep -c . /root/ab_${L}_health.tsv)
|
|
ok=$(awk -F'\t' '$2=="200"' /root/ab_${L}_health.tsv | wc -l)
|
|
echo " $ok/$n = $(awk -v a="$ok" -v b="$n" 'BEGIN{if(b>0)printf "%.2f", a*100/b; else print 0}')%"
|
|
echo " 状态码: $(awk -F'\t' '{print $2}' /root/ab_${L}_health.tsv | sort | uniq -c | tr '\n' ' ')"
|
|
echo " 非200:"
|
|
awk -F'\t' '$2!="200"{print " " $1 " 码=" $2 " " $3 "ms"}' /root/ab_${L}_health.tsv
|
|
echo " 耗时: $(awk -F'\t' '$2=="200"{print $3}' /root/ab_${L}_health.tsv | sort -n | awk '{a[NR]=$1} END{if(NR==0){print "无"}else{printf "最小 %d 中位 %d P90 %d P99 %d 最大 %d", a[1], a[int(NR/2)+1], a[int(NR*0.9)+1], a[int(NR*0.99)+1], a[NR]}}')"
|
|
fi
|
|
|
|
echo
|
|
echo " ── 连接数 ──"
|
|
if [ -f /root/ab_${L}_conns.tsv ]; then
|
|
tail -6 /root/ab_${L}_conns.tsv | sed 's/^/ /'
|
|
echo " 总数分布:"
|
|
awk -F'\t' 'NR>1 && $2 ~ /^[0-9]+$/ && $3 ~ /^[0-9]+$/ {print $2+$3}' \
|
|
/root/ab_${L}_conns.tsv | sort -n | uniq -c | sed 's/^/ /'
|
|
echo " 总数<=3 的次数: $(awk -F'\t' 'NR>1 && $2 ~ /^[0-9]+$/ && $3 ~ /^[0-9]+$/ && ($2+$3)<=3' /root/ab_${L}_conns.tsv | wc -l)"
|
|
fi
|
|
|
|
echo
|
|
echo " ── 内存/CPU(最近 5 条)──"
|
|
if [ -f /root/ab_${L}_res.tsv ]; then
|
|
echo " 时间 QUIC内存KB H2内存KB QUIC_CPU H2_CPU 已用MB 可用MB 负载"
|
|
tail -5 /root/ab_${L}_res.tsv | sed 's/^/ /'
|
|
fi
|
|
|
|
echo
|
|
echo "════════ 输出日志尾部 ════════"
|
|
tail -6 /root/ab_${L}.out 2>/dev/null | sed 's/^/ /' || echo " (无)"
|
|
|
|
echo
|
|
echo "════════ 折叠分析(如果有 python3)════════"
|
|
if [ -f /root/ab_${L}_conns.tsv ] && [ -f /root/ab_${L}_health.tsv ]; then
|
|
echo " (在 PC 上跑 rp_collapse.py 分析)"
|
|
fi
|