You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Zabbix调用NMAP端口检测脚本返回空值问题排查求助

问题:Zabbix调用NMAP端口检测脚本返回空值排查

我写了一个用NMAP检测端口的简单脚本,端口开放时返回1,关闭时返回0。在Zabbix中创建监控项调用该脚本,通过CLI以root和zabbix用户执行都正常,无权限问题;但通过Zabbix UI执行测试时,无报错却返回空值,请求协助排查原因。

脚本代码(zabbix-nmap.sh)

#!/bin/bash
PORT=$(nmap $1 -p $2)
SUB='open'
if [[ "$PORT" == *"$SUB"* ]]; then
  echo 1
else
  echo 0
fi

Zabbix监控项相关说明

  • Zabbix监控项测试界面
  • Zabbix监控项配置界面

排查方向建议

1. 修复路径依赖问题

Zabbix Agent执行脚本时,可能找不到nmap的位置,或者脚本本身路径没写全:

  • 把脚本里的nmap替换成绝对路径(可用which nmap查询实际路径,比如/usr/bin/nmap)
  • 在Zabbix监控项的用户参数里,指定脚本的完整绝对路径,不要用相对路径

2. 统一环境变量

CLI的环境变量和Zabbix Agent运行的环境变量存在差异,比如PATH不包含nmap所在目录。可以在脚本开头添加:

export PATH=$PATH:/usr/bin

或者直接用nmap的绝对路径,彻底规避环境变量问题。

3. 优化脚本输出逻辑

脚本执行时可能产生stderr输出,干扰Zabbix捕获stdout,同时nmap默认输出格式不稳定:

  • 把nmap命令的stderr重定向到/dev/null:
    PORT=$(nmap $1 -p $2 2>/dev/null)
    
  • 改用更稳定的grepable输出格式,避免默认输出的格式变动导致匹配失败,同时跳过主机存活检测减少冗余输出:
    PORT=$(nmap -Pn -p $2 $1 -oG - 2>/dev/null)
    

4. 检查Zabbix Agent配置

  • 确认zabbix_agentd.conf中的UnsafeUserParameters是否设置为1,自定义用户参数需要开启这个选项才能执行脚本
  • 检查用户参数的格式是否正确,示例:
    UserParameter=port.check[*],/绝对路径/zabbix-nmap.sh $1 $2
    
    修改配置后记得重启Zabbix Agent服务。

5. 排查SELinux限制

虽然CLI执行正常,但Zabbix Agent运行可能受SELinux约束:

  • 临时执行setenforce 0关闭SELinux,再测试Zabbix UI的监控项
  • 如果测试正常,需要给脚本添加SELinux上下文规则,示例:
    semanage fcontext -a -t zabbix_agent_exec_t "/脚本绝对路径/zabbix-nmap.sh"
    restorecon -v "/脚本绝对路径/zabbix-nmap.sh"
    

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 10:51:09