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

SNMPD服务器pass脚本返回重复OID问题求助

问题描述

配置snmpd.conf通过pass脚本获取自定义信息,相关配置如下:

root@srvweb:~# cat /etc/snmp/snmpd.conf
...
pass .1.3.6.1.2.1.1.9.1.5.0  /etc/snmp/users.sh

脚本内容及直接执行输出:

root@srvweb:~# cat /etc/snmp/users.sh
#!/bin/bash
OID=".1.3.6.1.2.1.1.9.1.5.0"
TYPE="string"
USERS=$(who --count | head -1 | sed 's/^.*://')
UNIQUE_USERS=$(echo "$USERS" | tr ' ' '\n' | sort -u | tr '\n' ' ')
echo -en "${OID}\r\n"
echo -en "${TYPE}\r\n"
echo -en "${UNIQUE_USERS} \r\n"
exit 0
root@srvweb:~# /etc/snmp/users.sh
.1.3.6.1.2.1.1.9.1.5.0
string
test

执行snmpwalk -v2c -c public localhost时出现重复OID报错:

iso.3.6.1.2.1.1.9.1.5.0 = STRING: "test "
iso.3.6.1.2.1.1.9.1.5.0 = STRING: "test "

Error: OID not increasing: iso.3.6.1.2.1.1.9.1.5.0

>= iso.3.6.1.2.1.1.9.1.5.0

尝试修改echo输出去掉强制\r\n后问题仍未解决。


原因分析与解决办法

核心原因

你使用的OID .1.3.6.1.2.1.1.9.1.5.0 属于SNMP标准MIB中的sysORDescr节点,snmpd本身会内置返回该节点的数据,再通过pass脚本绑定同一个OID,就会导致snmpd同时返回内置数据和脚本输出的两组相同OID,触发"OID not increasing"报错。

解决步骤

  1. 更换私有OID
    放弃使用标准MIB已占用的OID,改用私有企业OID段(比如.1.3.6.1.4.1.99999,99999为测试用编号):

    • 修改/etc/snmp/snmpd.conf:
      pass .1.3.6.1.4.1.99999.1.1.0  /etc/snmp/users.sh
      
    • 修改users.sh中的OID变量:
      OID=".1.3.6.1.4.1.99999.1.1.0"
      
  2. 修正脚本输出格式
    snmpd的pass脚本要求输出为三行一组(OID、类型、值),且需要明确结束标记。建议移除强制的\r\n,改用标准echo输出,同时在末尾添加空行告知snmpd数据结束:
    修改后的users.sh核心输出部分:

    echo "${OID}"
    echo "${TYPE}"
    echo "${UNIQUE_USERS}"
    echo  # 添加空行作为结束标记
    
  3. 重启snmpd服务

    systemctl restart snmpd
    
  4. 验证结果
    执行以下命令验证:

    snmpwalk -v2c -c public localhost .1.3.6.1.4.1.99999
    

    此时只会返回一次自定义OID的数据,不会出现重复报错。


内容的提问来源于stack exchange,提问作者Marc Fité

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:27:44