NOTE

服务器控制面与协同体系总览(2026-04-17)

2026/04/19 18 min read NOTE 类 系统运维 项目 多服务器智能体 多服务器智能体

服务器控制面与协同体系总览(2026-04-17)

1. 这套体系现在的核心结论

当前服务器体系已经明确分成三层:

  • Windows 本机 NEVERLETMEGO:操作台,不承担正式管理节点职责
  • 管理节点:124.220.233.126(别名 tcent
  • 运行节点:121.196.202.114(别名 aliyun-run)、111.228.6.224(京东云运行机)
  • 待纳管节点:140.143.229.144(别名 koze,当前 SSH 仍未打通)

已经落地的控制面:

  • Windows 本地控制目录:E:\server-control
  • 管理节点 Linux 控制面:/home/ubuntu/server-control-ansible
  • 主机单机管理面板:Cockpit
  • Windows 轻量总览监控:SSH 拉取式 dashboard
  • 正式统一监控中心:Zabbix(部署在 124.220.233.126
  • 基础自动化:Ansible(部署在 124.220.233.126

设计原则:

  • 不把 Windows 本机当正式管理节点
  • 不把多机管理混成“宝塔式大一统面板”
  • 统一入口、统一监控、统一批量变更,但尽量不直接暴露新的公网端口

2. 当前资产与角色分工

2.1 Windows 本机

  • 主机名:NEVERLETMEGO
  • 角色:操作台 / 浏览器入口 / SSH 入口 / 本地辅助脚本运行位置
  • 关键目录:E:\server-control
  • 说明:
    • 负责开隧道访问 Cockpit / Zabbix
    • 负责本地状态页和定时刷新
    • 不承担正式的 Ansible 控制面和中心监控服务

2.2 管理节点:tcent

  • 公网 IP:124.220.233.126
  • 内网 IP:10.0.0.12
  • SSH 用户:ubuntu
  • 角色:正式管理节点
  • 已部署:
    • Cockpit:127.0.0.1:9090
    • node exporter:127.0.0.1:9100
    • Zabbix frontend:127.0.0.1:18080
    • Zabbix server:服务端已启用
    • Zabbix agent2:本机 agent 已启用
    • Ansible 控制面:/home/ubuntu/server-control-ansible

2.3 运行节点:aliyun-run

  • 公网 IP:121.196.202.114
  • SSH 用户:root
  • 角色:运行节点
  • 已部署:
    • Cockpit:127.0.0.1:9090
    • node exporter:127.0.0.1:9100
    • zabbix-agent2:监听 0.0.0.0:10050
  • 与管理节点关系:
    • 通过 124 -> 121 的 SSH 隧道,把 agent 映射到 124127.0.0.1:10052
    • 因此 Zabbix 可以在不开放 121 公网 agent 端口的情况下完成采集

2.4 待纳管节点:koze

  • 公网 IP:140.143.229.144
  • 内网 IP:10.1.52.211
  • SSH 用户:ubuntu
  • 角色:候选被管节点
  • 当前状态:
    • ICMP 可达
    • SSH 不可达
    • 从 Windows 与 124 到其 22/2222/22022/22222/80/443 都是 CLOSED
  • 结论:
    • 机器不是不存在,而是入口端口没开、或 sshd 未监听
    • 现阶段无法纳入 Ansible / Cockpit / Zabbix

2.5 京东云运行机

  • 公网 IP:111.228.6.224
  • 内网 IP:172.16.0.6
  • SSH 用户:root
  • 角色:运行节点
  • 已完成:
    • UFW:deny incoming / allow outgoing
    • 仅放通 22/tcp
    • fail2ban:已启用 sshd jail
    • Docker Engine + Compose:已安装
  • 备注:
    • 已写入 servers.json
    • 但当前 Windows 轻量监控里显示 ssh_unreachable,说明本地自动采集链路尚未完全同步到它

3. Windows 本地控制目录结构

控制目录:E:\server-control

关键文件与用途:

  • README.md
    • 当前控制体系的入口说明
  • servers.json
    • 当前服务器清单、角色、已部署服务、备注
  • ssh_config
    • Windows 本地 SSH 别名
  • Test-Servers.ps1
    • 从 Windows 快速测试各主机连通性
  • Open-Cockpit-B.ps1
    • 打开 tcent 的 Cockpit 隧道
  • Open-Zabbix-124.ps1
    • 打开 tcent 的 Zabbix 前端隧道
  • monitoring\Refresh-Monitor.ps1
    • 通过 SSH 拉取状态并生成本地 dashboard
  • monitoring\Open-Monitor-Dashboard.ps1
    • 刷新并打开 dashboard
  • ops\inventory\hosts.yml
    • Windows 侧保存的 inventory 结构参考
  • ops\playbooks\bootstrap.yml
    • 基础纳管 playbook 参考
  • bin\Start-Server-Control.ps1
    • 本地加密控制面/秘密库入口
  • secrets\
    • 加密秘密库,敏感信息不应以明文散落在 JSON / SQL 中

4. SSH 别名与访问方式

当前 Windows 本地别名:

  • tcent
    • Host: 124.220.233.126
    • User: ubuntu
    • Key: ~/.ssh/id_rsa
  • aliyun-run
    • Host: 121.196.202.114
    • User: root
    • Key: ~/.ssh/id_ed25519
  • koze
    • Host: 140.143.229.144
    • User: ubuntu
    • Key: ~/.ssh/id_rsa

注意:

  • aliyun-run 使用的是 id_ed25519,不是 id_rsa
  • 之前监控和脚本误报过 121 不可达,根因就是别名密钥指错

5. 管理节点上的正式控制面

管理节点:124.220.233.126

5.1 Ansible

已部署在:

  • /home/ubuntu/server-control-ansible

当前内容:

  • ansible.cfg
  • inventory/hosts.yml
  • playbooks/bootstrap.yml

已完成验证:

  • ansible all -m ping --limit 'tcent,aliyun-run' 成功
  • ansible-playbook playbooks/bootstrap.yml --limit 'tcent,aliyun-run' 成功

说明:

  • 现在 124 已经是真正可工作的 Linux Ansible 控制面
  • 后续 koze 一旦 SSH 打通,可以直接纳入 inventory 然后执行 bootstrap

5.2 Zabbix

已部署在:

  • Zabbix Server:124 本机服务
  • Zabbix Frontend:127.0.0.1:18080
  • Zabbix API:http://127.0.0.1:18080/api_jsonrpc.php

当前状态:

  • API apiinfo.version 已返回 7.4.9
  • 默认登录 Admin / zabbix 可用
  • 已创建主机:
    • tcent -> 127.0.0.1:10050
    • aliyun-run -> 127.0.0.1:10052

说明:

  • 124 自身 agent 使用本地 10050
  • 121 的 agent 通过 systemd 隧道服务映射到 12410052
  • Zabbix 前端没有暴露公网,而是只监听回环,通过 Windows SSH 隧道访问

5.3 Cockpit

  • 124127.0.0.1:9090
  • 121127.0.0.1:9090

使用方式:

  • 从 Windows 上开 SSH 本地转发访问
  • 不直接暴露到公网

6. 监控体系:轻量层 + 正式层

6.1 轻量层(Windows 本地 dashboard)

特点:

  • 基于 SSH 拉取状态
  • 不依赖开放 exporter 公网端口
  • 适合快速看“哪些机器能连上、Cockpit / node exporter 是否活着”

现有文件:

  • E:\server-control\monitoring\Refresh-Monitor.ps1
  • E:\server-control\monitoring\Open-Monitor-Dashboard.ps1
  • E:\server-control\monitoring\status.json
  • E:\server-control\monitoring\dashboard.html

自动刷新:

  • 已建计划任务:Server Control Monitor Refresh
  • 每 15 分钟刷新一次
  • 以隐藏窗口运行

注意:

  • 当前 status.json 只是“那一刻的连通性快照”
  • 如果别名或密钥变化,但未刷新,可能出现短暂滞后

6.2 正式层(Zabbix)

特点:

  • 有中心数据库
  • 有 API
  • 有模板
  • 后续可扩展告警、触发器、邮件/IM 通知

当前适合承担:

  • 正式主机监控中心
  • CPU / 内存 / 磁盘 / agent 可用性统一纳管

7. Windows 本机弹终端窗口问题的结论

这个问题不是纯随机旧残留,而是启动链路设计问题。

已定位到的主要来源:

  • 计划任务 OpenClaw Node
    • 原先动作:cmd.exe /c "C:\Users\ASUS-KL\.openclaw\node.cmd"
  • 计划任务 Aliyun Reverse SSH
    • 原先动作:cmd.exe /c "C:\Users\ASUS-KL\.openclaw\aliyun-reverse-ssh.cmd"
  • 启动项:
    • OpenClaw SSH Control.cmd

这些入口的问题:

  • 它们先起 cmd.exe
  • 即便后续再调 PowerShell,也会先闪一个终端窗口

已经做的修正:

  • OpenClaw Node 改成:
    • 直接 powershell.exe -WindowStyle Hidden -File node-supervisor.ps1
  • Aliyun Reverse SSH 改成:
    • 直接 powershell.exe -WindowStyle Hidden -File aliyun-reverse-ssh.ps1
  • 启动目录中的 OpenClaw SSH Control.cmd
    • 已改为 OpenClaw SSH Control.vbs
    • 通过 WScript.Shell.Run(..., 0, False) 隐藏启动
    • .cmd 已改名为 .cmd.disabled

结论:

  • 本机弹窗主因已经被压下去一轮
  • 如果以后仍偶尔弹窗,需要继续排查脚本内部是否还有二次拉起的可见控制台进程

8. 当前还没解决的问题

8.1 koze 仍未纳管

当前证据:

  • 能 ping 通 140.143.229.144
  • 但 SSH / Web 等常用端口全部关闭

最可能原因:

  • 云安全组/防火墙未放通
  • sshd 未监听
  • 端口改了但未知

下一步建议:

  • 去云控制台或机器控制台确认 sshd 实际监听端口
  • 放通至少一个从 124 或 Windows 可达的管理端口
  • 然后纳入 124 的 Ansible + Cockpit + Zabbix

8.2 aliyun-run 在本地轻量 dashboard 中曾出现误报

根因:

  • ssh_config 中别名曾使用错误私钥

当前状态:

  • 已修正为 id_ed25519
  • 若本地 dashboard 仍偶发误报,先手动刷新一次再判断

8.3 京东云运行机还没完全并入轻量监控链路

虽然资产已登记,但轻量 dashboard 当前快照里仍显示 ssh_unreachable

可能原因:

  • Refresh-Monitor.ps1 的目标别名/hosts 清单尚未同步完整
  • 或 SSH 别名尚未补充到 ssh_config

9. 现在推荐的日常操作方式

9.1 看整体情况

在 Windows 上:

powershell -ExecutionPolicy Bypass -File E:\server-control\monitoring\Open-Monitor-Dashboard.ps1

9.2 打开管理节点 Cockpit

powershell -ExecutionPolicy Bypass -File E:\server-control\Open-Cockpit-B.ps1 -OpenBrowser

9.3 打开管理节点 Zabbix

powershell -ExecutionPolicy Bypass -File E:\server-control\Open-Zabbix-124.ps1 -OpenBrowser

9.4 从 Windows 验证服务器可达性

powershell -ExecutionPolicy Bypass -File E:\server-control\Test-Servers.ps1

9.5 在管理节点上跑正式自动化

登录 124 后:

cd ~/server-control-ansible
ansible all -m ping
ansible-playbook playbooks/bootstrap.yml --limit 'tcent,aliyun-run'

10. 推荐的后续路线

建议按这个顺序推进:

  1. 打通 koze 的 SSH 入口
  2. koze 纳入 124 的 Ansible inventory
  3. koze 装:
    • Cockpit
    • node exporter
    • zabbix-agent2
  4. 把京东云运行机补进:
    • ssh_config
    • 本地 dashboard
    • 124 的 Ansible inventory
    • Zabbix host
  5. 在 Zabbix 里补触发器和告警:
    • 磁盘 > 80%
    • load 持续过高
    • agent 不可达
    • 管理节点 Cockpit / Zabbix 前端异常
  6. 视需要再决定是否引入:
    • Portainer(如果 Docker 节点明显增多)
    • JumpServer(如果多人协作、审计需求提高)
    • NetBox(如果服务器/资产数量继续增长)

11. 最终一句话总结

这套服务器体系现在已经不是“几台机器各管各的”,而是已经形成了一个清晰的控制结构:

  • Windows 做操作台
  • 124 做正式管理节点
  • 121 和其他业务机做运行节点
  • Cockpit 管单机
  • Zabbix 管统一监控
  • Ansible 管批量变更
  • koze 是当前唯一明确卡在入口层的节点

如果以后需要恢复上下文,优先看:

  • E:\server-control\README.md
  • E:\server-control\servers.json
  • E:\server-control\monitoring\status.json
  • 本文档