snmpd pass to run python



我试图使用snmpd通过snmp查询modbus设备,以传递python脚本来检索数据。

#! /bin/bash
if [ "$1" = "-g" ]
then
echo .1.3.6.1.4.1.52612.10.3.1
echo string
python /usr/local/bin/readvolt.py
fi
exit 0

这是 readvolt.py 看起来像:

#!/usr/bin/python
import minimalmodbus
eqp = minimalmodbus.Instrument('/dev/ttyUSB0',1) # port name, slave address (in decimal)
# skip some other lines for serial port initialization
volt = eqp.read_float(0,4,2) # getting data from serial modbus
print volt

还有我的 snmpd.conf 中的这句话:

pass .1.3.6.1.4.1.52612.10.3.1 /bin/sh /usr/local/bin/volt.sh

我的问题:我从 python 得到了回溯,找不到 minimalmodbus 模块,但是当我尝试直接从主机运行 readvolt.py 时,它按预期工作(它可以打印出结果(伏特((

pi@raspberrypi:/usr/local/bin $ readvolt.py
220.25

我还尝试使用简单的python脚本(test.py(,以确保snmpd pass是否可以在snmp管理器的snmpget响应上运行python脚本

#!/usr/bin/python
import sys
print "test"

它运行正常:

suryo@r50e:~$ snmpwalk -v2c -c public 192.168.1.5 .1.3.6.1.4.1.52612.10.3.1
iso.3.6.1.4.1.52612.10.3.1 = STRING: "test"
suryo@r50e:~$ 

似乎Python在通过SNMPD pass运行时无法导入外部模块。 我在想,如果这是一个访问控制问题,Debian-snmp 无权访问串行端口。

通过找出 snmpd 守护程序的用户名解决了问题。我把whoami放在脚本中,得到了'Debian-snmp',然后变得直截了当,通过运行来检查组成员资格:

pi@rraspberrypi:~$ groups Debian-snmp
Debian-snmp : Debian-snmp

将 Debian-snmp 放入拨出成员资格中,以授予对串行端口的完全访问权限:

pi@raspberrypi:~ $ sudo usermod -a  -G dialout Debian-snmp

重新启动 snmpd 以使用新成员身份登录,然后 voilla..它可以从snmp命令/snmpget读取从模块总线设备

相关内容

  • 没有找到相关文章

最新更新