Zabbix SSH Agent的坑

前言

zabbix作为一个强大的监视工具,可以是实现各种维度,各种方式的监视。
今天尝试了SSH Agent,远程执行命令取得监视对象机的各种情报。

实验相关信息

监视服务器:CentOS6.7 zabbix4.0
监视对象服务器:CentOS6.7
使用监视类型:SSH Agent

设定内容

见截图。


Zabbix SSH Agent的坑_第1张图片

我实验时用的是账号密码登录方式。
由于系统安全的限制,root用户SSH登录服务器被禁止掉。只能采用普通用户的账号了。

监视的结果

能够没障害地执行命令,但是取得的值一直不对。
分以下两种情况。
命令1:

/usr/bin/sudo /usr/sbin/lsof -c java | wc -l

取得值一直是0
命令2:

/usr/sbin/lsof -c java | wc -l

只能取得5,实际上在监视对象服务器上root用户执行,得到结果是102.
注意:lsof虽说普通用户也可以执行,但是值不是正确的。必须root执行。

分析

看命令2能够取得正确的普通用户权限的命令执行结果,说明已经正常SSH login了。
但是命令1,不能取得说明命令没有被正确执行。

调查1

命令1直接在监视对象服务器的普通用户权限下执行,会要求root密码。
看来在zabbix上命令1执行不过,就是因为没有输入密码啊。
考虑解决方案的话,zabbix无法动态输入密码,只好考虑将lsof执行权限下放给普通用户。

对策1

# vim /etc/sudoers

#追加一行
putonguser ALL=NOPASSWD:/usr/sbin/lsof

解释:让普通用户普通user具有所有超级用户的权限执行lsof命令而又不用输入密码

在监视对象服务器上执行

$ /usr/bin/sudo /usr/sbin/lsof -c java | wc -l

确实不需要输入密码,就能得到正确的结果。
可是。。。。zabbix上还是只得到0.

调查2

尝试在监视服务器上执行SSH命令

# ssh [email protected] sudo sudo /usr/bin/sudo /usr/sbin/lsof -c java | wc -l
[email protected]'s password:
sudo: sorry, you must have a tty to run sudo
0

看来还是需要root密码,如果不输入的话,得到返回值是0(也就是前面为什么一直只返回0)

对策2

继续修改sudoers权限

# vim /etc/sudoers
# Disable "ssh hostname sudo ", because it will show the password in clear.
# You have to run "ssh -t hostname sudo ".
# 下面行注释掉
# Defaults requiretty

解释:这一行没有注释的情况下,代表必须需要tty执行命令,后台执行(zabbix远程后台执行命令)是不可以的。
除非使用"ssh -t hostname sudo "的方式。
在监视服务器上执行SSH命令,成功。

# ssh -t [email protected] sudo /usr/sbin/lsof -c java | wc -l
[email protected]'s password:
Connection to 10.xxx.xxx.xxx closed.
102

通过这个实验似乎可以证明,zabbix执行的命令方式是"ssh hostname sudo "
注释掉之后,zabbix的SSH Agent监视可以正常输出结果了。

你可能感兴趣的:(Zabbix SSH Agent的坑)