0

我们在使用 Nagios 时遇到了一些奇怪的问题。我们用 Python 编写了一个脚本,它使用了 paramiko、httplib 和 re。当我们注释掉使用 paramiko 编写的代码时,脚本在 Nagios 中返回 OK。当我们取消注释脚本时,状态只会返回(null)。

这是我们的代码

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#ssh.connect(self.get('hostname'),int(self.get('port')),self.get('username'),allow_agent=True)
ssh.connect('192.168.56.102' , 22 , 'oracle' ,allow_agent=True)
link = '127.0.0.1:4848'
stdin,stdout,stderr = ssh.exec_command('wget --no-proxy ' + link + ' 2>&1 | grep -i "failed\|error"')
result = stdout.readlines()
result = " ".join(result)

if result == "":
    return MonitoringResult(MonitoringResult.OK,'Webservice up')
else:
    return MonitoringResult(MonitoringResult.CRITICAL,'Webservice down %s' % result)

所以当我们注释掉上面的部分

if result =="":

并在 if 上方添加 result="",它只会在 Nagios 中返回 'Webservice up'。当我们启用上面的代码时,如果它只会返回(null)。和paramiko有冲突吗?

在终端中运行代码时,它只返回正确的状态,但在 Nagios 中实现时不显示

4

1 回答 1

0

我发现虽然 nagios 以有效用户身份运行,但"nagios"它正在使用用户的环境设置,"root"并且无法读取根私钥来建立连接。

添加key_filename='/nagiosuserhomedir/.ssh/id_dsa'选项为ssh.connect()我解决了同样的问题(在代码中显式传递 nagios 用户的私钥)。

于 2013-10-22T04:16:46.843 回答