Reuse saved managerd agent token on deploy
This commit is contained in:
parent
d1d2da08d1
commit
7a02176577
@ -3,7 +3,7 @@
|
||||
# 部署到 /opt,包含完整的运行时目录、权限、日志轮转等
|
||||
#
|
||||
# 用法: sudo ./deploy.sh [install|upgrade|status|logs|clean-hls|uninstall]
|
||||
# 安装/升级 Agent 时必须显式传入后台管理统一主钥匙:
|
||||
# 首次安装 Agent 时传入后台管理统一主钥匙;后续部署默认沿用设备保存的主钥匙:
|
||||
# sudo AGENT_TOKEN=<managerd.json 中的 agent_token> ./deploy.sh install
|
||||
|
||||
set -e
|
||||
@ -46,18 +46,28 @@ DEPLOY_CONFIG_OVERLAYS="${DEPLOY_CONFIG_OVERLAYS:-configs/overlays/face_debug.js
|
||||
DEPLOY_CONFIG_ID="${DEPLOY_CONFIG_ID:-local_3588_face_debug}"
|
||||
DEPLOY_CONFIG_VERSION="${DEPLOY_CONFIG_VERSION:-$(date +%Y%m%d.%H%M%S)}"
|
||||
|
||||
# 后台管理系统访问所有设备 agent 的统一主钥匙。
|
||||
# 必须由部署调用方显式传入,禁止设备本地随机生成,避免后台和设备 token 漂移。
|
||||
# 示例:
|
||||
# 后台管理系统访问所有设备 agent 的统一主钥匙。传入 AGENT_TOKEN 表示写入/轮换主钥匙;
|
||||
# 不传时沿用设备上保存的主钥匙。禁止设备本地随机生成,避免后台和设备 token 漂移。
|
||||
# 首次安装示例:
|
||||
# sudo AGENT_TOKEN=4fe2d69fda23d0d5d04a1486d4920e68 ./scripts/deploy.sh install
|
||||
# 后续升级示例:
|
||||
# sudo ./scripts/deploy.sh upgrade
|
||||
AGENT_TOKEN="${AGENT_TOKEN:-}"
|
||||
AGENT_TOKEN_FILE="$AGENT_INSTALL_DIR/agent.token"
|
||||
|
||||
require_agent_token() {
|
||||
resolve_agent_token() {
|
||||
if [ -z "$AGENT_TOKEN" ]; then
|
||||
echo -e "${RED}错误: AGENT_TOKEN 未设置${NC}"
|
||||
echo "Agent token 是后台管理系统访问所有设备的统一管理主钥匙,部署脚本不会本地生成 token。"
|
||||
echo "请使用:sudo AGENT_TOKEN=<managerd.json 中的 agent_token> ./scripts/deploy.sh install"
|
||||
exit 1
|
||||
if [ -f "$AGENT_TOKEN_FILE" ]; then
|
||||
AGENT_TOKEN="$(tr -d '\r\n[:space:]' < "$AGENT_TOKEN_FILE")"
|
||||
echo -e "${GREEN}✓${NC} 使用设备已保存的后台管理统一主钥匙"
|
||||
else
|
||||
echo -e "${RED}错误: 未提供 AGENT_TOKEN,且未找到已保存的主钥匙 $AGENT_TOKEN_FILE${NC}"
|
||||
echo "首次安装必须使用:sudo AGENT_TOKEN=<managerd.json 中的 agent_token> ./scripts/deploy.sh install"
|
||||
echo "部署脚本不会本地生成 token。"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${GREEN}✓${NC} 使用 AGENT_TOKEN 写入/轮换后台管理统一主钥匙"
|
||||
fi
|
||||
if ! printf '%s' "$AGENT_TOKEN" | grep -Eq '^[A-Za-z0-9._:-]+$'; then
|
||||
echo -e "${RED}错误: AGENT_TOKEN 包含不支持的字符${NC}"
|
||||
@ -491,7 +501,7 @@ EOF
|
||||
# 安装 Agent
|
||||
cmd_install_agent() {
|
||||
echo -e "${BLUE}[2/5] 安装 Agent...${NC}"
|
||||
require_agent_token
|
||||
resolve_agent_token
|
||||
|
||||
# 查找 Agent 编译产物(优先使用预编译的 arm64 二进制)
|
||||
AGENT_SOURCE=""
|
||||
@ -513,6 +523,8 @@ cmd_install_agent() {
|
||||
|
||||
cp "$AGENT_SOURCE" "$AGENT_INSTALL_DIR/rk3588-agent"
|
||||
chmod +x "$AGENT_INSTALL_DIR/rk3588-agent"
|
||||
printf '%s\n' "$AGENT_TOKEN" > "$AGENT_TOKEN_FILE"
|
||||
chmod 600 "$AGENT_TOKEN_FILE"
|
||||
|
||||
# Agent 配置
|
||||
cat > "$AGENT_INSTALL_DIR/agent.config.json" << EOF
|
||||
@ -870,6 +882,7 @@ case "${1:-install}" in
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " sudo AGENT_TOKEN=<managerd.json 中的 agent_token> ./deploy.sh install"
|
||||
echo " sudo ./deploy.sh upgrade # 沿用设备保存的后台管理统一主钥匙"
|
||||
echo " sudo ./deploy.sh status"
|
||||
echo " sudo ./deploy.sh clean-hls 7 # 保留最近7天"
|
||||
exit 1
|
||||
|
||||
@ -6,14 +6,18 @@ ROOT = Path(__file__).resolve().parents[1]
|
||||
|
||||
|
||||
class DeployScriptTest(unittest.TestCase):
|
||||
def test_deploy_requires_managerd_agent_token_without_fallback(self):
|
||||
def test_deploy_uses_saved_managerd_agent_token_without_random_fallback(self):
|
||||
text = (ROOT / "scripts" / "deploy.sh").read_text(encoding="utf-8")
|
||||
|
||||
self.assertIn('AGENT_TOKEN="${AGENT_TOKEN:-}"', text)
|
||||
self.assertIn("require_agent_token", text)
|
||||
self.assertIn('AGENT_TOKEN_FILE="$AGENT_INSTALL_DIR/agent.token"', text)
|
||||
self.assertIn("resolve_agent_token", text)
|
||||
self.assertIn('AGENT_TOKEN="$(tr -d', text)
|
||||
self.assertIn('"token": "$AGENT_TOKEN"', text)
|
||||
self.assertIn('printf \'%s\\n\' "$AGENT_TOKEN" > "$AGENT_TOKEN_FILE"', text)
|
||||
self.assertNotIn("openssl rand", text)
|
||||
self.assertIn("不会本地生成 token", text)
|
||||
self.assertIn("首次安装必须使用", text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Loading…
Reference in New Issue
Block a user