SNMP pass命令返回OID错误,但显然在服务器上运行

SNMP pass命令返回OID错误,但显然在服务器上运行,snmp,net-snmp,Snmp,Net Snmp,我刚刚开始使用SNMP的第一步,我试图将一个简单的检查脚本的输出添加到SNMP中,但我面临一些问题。 我正在尝试添加一个温度检查文件,以便通过SNMP将Raspberry Pi 4返回到远程轮询器,但仅仅按照大多数在线指南操作,我就一无所获,因为每次我都会遇到此错误: 此OID当前不存在此类实例 我正在尝试使用pass函数,但没有得到任何结果。 目前,这是我在snmpd.conf文件中声明的内容: 通过1.3.6.1.2.1.25.1.8/bin/bash/script/check_temp.s

我刚刚开始使用SNMP的第一步,我试图将一个简单的检查脚本的输出添加到SNMP中,但我面临一些问题。 我正在尝试添加一个温度检查文件,以便通过SNMP将Raspberry Pi 4返回到远程轮询器,但仅仅按照大多数在线指南操作,我就一无所获,因为每次我都会遇到此错误:

此OID当前不存在此类实例

我正在尝试使用
pass
函数,但没有得到任何结果。 目前,这是我在snmpd.conf文件中声明的内容:

通过1.3.6.1.2.1.25.1.8/bin/bash/script/check_temp.sh

这是命令输出:

/script/check_temp.sh
.1.3.6.1.2.1.25.1.8
integer
589
这是轮询器的命令输出:

snmpget -c test -v 2c 1.2.3.4 .1.3.6.1.2.1.25.1.8
HOST-RESOURCES-MIB::hrSystem.8 = No Such Instance currently exists at this OID
但如果我尝试在前台运行snmpd,我实际上看不到任何错误,相反,脚本似乎已执行:

sudo snmpd -f -Le -Ducd-snmp/pass -Drun
registered debug token ucd-snmp/pass, 1
registered debug token run, 1
NET-SNMP version 5.7.3
ucd-snmp/pass: pass-running:  /bin/bash /usr/script/check_temperature/check_temp.sh -g .1.3.6.1.2.1.25.1.8
run:exec: running '/bin/bash /usr/script/check_temperature/check_temp.sh -g .1.3.6.1.2.1.25.1.8'
run:exec:   got 120000 bytes
run:exec:   child 7480 finished. result=768
我做错了什么?我检查过的指南中没有提到创建MIB,也没有提到我正在做的任何其他步骤,但我仍然没有得到我所期望的任何东西


提前感谢您给我的任何提示或建议。我希望这能帮助任何试图为其Raspberry或任何其他tipycal Linux设备配置SNMP检查的人,因为我查看的大多数指南都假设您已经了解一些SNMP概念,当你刚刚开始的时候,你可能还没有掌握它们。 大多数指南将说明使用
扩展
通过
,如下所示:

查看所有包含的内容。1.3.6.1.4.1

pass .1.3.6.1.4.1.9999.1 /bin/bash /path/to/command

extend checkcommand /bin/bash /path/to/command
就这样,我面对我原来的问题,;只有当我添加以下行时,我才能使事情正常运行,为
extend
函数提供一个空的OID分支,并查看
.1.3.6.1.4.1
分支的所有可访问性:

view all included .1.3.6.1.4.1

extend .1.3.6.1.4.1.9999.1 checkcommand /bin/bash /path/to/command
通过这种方式,我实际上从snmpwalk和OID
.1.3.6.1.4.1.9999.1
上的snmpwalk结果中获得了一个回复,您可以检索OID snmpd构建以用于脚本的输出,以便使用它从轮询器进行snmp查询


我知道这可能是基础,但我最初阅读的所有教程和指南可能都暗示了其中的一个或多个步骤,因此我希望这对任何其他SNMP初学者都有帮助。

使用SNMP WALK操作了解可用对象及其OID。那么你就不需要问别人为什么了。嗨,谢谢你,但是你的评论完全没有任何帮助,如果我知道它是如何工作的,我一开始就不会问。不管怎样,snmpwalk并没有回复我想要通过的旧版本。如果对任何人都有帮助的话,我可以通过使用
extend
函数来解决这个问题。“snmpwalk没有返回我试图传递的OID”,但这不是一个明确的指示,表明您没有在代理端注册对象(所以后来您知道必须使用
extend
)?它还排除了“此OID当前不存在此类实例”的其他常见原因(例如错误的OID或缺少“.0”由
snmpget
发送)。不管怎样,如果你真的想帮助别人,把你学到的东西写在下面的答案里,然后接受它。