跳转至

Probe Agent

Probe Agent 执行活跃性检测和跨多设备的并行 CLI 执行。它是唯一直接访问实时网络设备的 Ops 子 agent。

功能声明

ID 声明 状态
C-NE-24 execute_cli_parallel 在执行前验证命令白名单 🔶 需设备环境
C-NE-25 设备名仅允许 [a-zA-Z0-9_\-.],非法字符被拒绝 ⬜ 待验证

使用场景

  • "所有核心路由器可达吗?"
  • "在所有设备上执行 show ip route"
  • "检查全网 OSPF 邻居状态"

编排器将这些请求路由到 Probe,因为它们需要实时 SSH 连接。


工具:execute_cli_parallel

使用 Nornir 在多台设备上同时执行 CLI 命令。

execute_cli_parallel(
    command: str,           # 要执行的 CLI 命令
    devices: list[str],     # 目标设备名(来自 netops.devices)
    timeout: int = 30       # 每设备超时(秒)
)

安全模型

SSH 连接建立前强制执行三项检查:

  1. 设备名验证 — 名称必须匹配 [a-zA-Z0-9_\-.]。防止通过构造主机名的注入攻击。

  2. 白名单检查 — 命令必须存在于目标设备平台的 commands 表中。不在白名单的命令被拒绝。

  3. 黑名单检查 — 即使在白名单中,匹配 blacklisted_commands.yaml 中任何 pattern 的命令也被拒绝。

用户请求:"在 R1 上执行 'reload'"
    → 白名单:不在 commands 表中 → 拒绝
    → (即使在白名单中,黑名单正则 "reload" 也会拒绝)

管道命令

包含 |(管道)的命令需要 commands 表条目中 pipe_allowed = true。防止通过管道输出的意外 shell 注入。


使用示例

通过 Ops 编排器:

olav --agent ops "检查全网 BGP 邻居是否都已建立"

编排器委托给 Probe,后者:

  1. 查询 netops.devices 获取所有设备名
  2. 在每台设备上并行执行 show ip bgp summary
  3. 返回聚合结果(含每设备状态)