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

SNMP pass command returning OID error but apparently running on server

我只是开始使用 SNMP,我正在尝试将简单检查脚本的输出添加到 SNMP,但我遇到了一些问题。 我正在尝试为 Raspberry Pi 4 添加一个温度检查文件,以便通过 SNMP 返回到远程轮询器,但是仅仅按照大多数在线指南导致我一无所获,因为我遇到了这个错误每一次:

No Such Instance currently exists at this OID

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

pass 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

我做错了什么? None 我检查的指南中提到创建 MIBS,或任何其他比我已经在做的更进一步的步骤,但我仍然没有得到我期望的任何东西。

提前感谢您给我的任何提示或建议,让我走上正确的道路。

我希望这可以帮助任何试图为他们的 Raspberry 或任何其他典型 Linux 设备配置 SNMP 检查的人,因为我检查的大多数指南都假设您已经知道一些 SNMP 概念,而它是可能当你刚开始的时候你还没有掌握它们。 大多数指南会声明使用 extendpass,如下所示:

查看全部包含 .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 上的 snmpwalk 结果 .1.3.6.1.4.1.9999.1 你可以检索脚本输出的 OID snmpd 构建,以便使用它从中进行 snmp 查询轮询器。

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