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"报错。
解决步骤
更换私有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"
- 修改
修正脚本输出格式
snmpd的pass脚本要求输出为三行一组(OID、类型、值),且需要明确结束标记。建议移除强制的\r\n,改用标准echo输出,同时在末尾添加空行告知snmpd数据结束:
修改后的users.sh核心输出部分:echo "${OID}" echo "${TYPE}" echo "${UNIQUE_USERS}" echo # 添加空行作为结束标记重启snmpd服务
systemctl restart snmpd验证结果
执行以下命令验证:snmpwalk -v2c -c public localhost .1.3.6.1.4.1.99999此时只会返回一次自定义OID的数据,不会出现重复报错。
内容的提问来源于stack exchange,提问作者Marc Fité
相关产品推荐
相关产品推荐

