CLIENT端登录测试
[nagios@nagios ~]$ ssh nagios@192.168.x.y
Last login: Wed Aug 3 09:15:59 2011 from 192.168.x.x
[nagios@centos-server ~]$
看到没?从192.168.x.x登录到192.168.x.y无需密码了。
如果没有这样的效果,大家看下是不是前面的权限问题。我曾今也是因为权限折腾了我同事半天。哈哈。
II.无密码登录远程执行命令 实现目标:nagios用户远程启动server端mysql服务
-----------------------------------------------------------------------------------------------
Server端(192.168.x.x)制作
------------------------------------------------------------------------------------------------
(1) 配置mysql启动控制脚本
输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(controlmysql):
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY ' controlmysql ';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY ' controlmysql ';
作用:用与启动/关闭控制mysql服务
Client端测试(以nagios用户登录)
[nagios@nagios ~]$ ssh nagios@192.168.x.y "sudo /data0/mysql/3306/mysql start"
sudo: sorry, you must have a tty to run sudo
HostAddress=$4
debug=1
if [ $debug -eq 1 ];then
echo "MysqlServer:${HostAddress}" >>/tmp/ReMysql.log
fi
case "$1" in
OK)
;;
WARNING)
;;
UNKNOWN)
;;
CRITICAL)
case "$2" in
SOFT)
case "$3" in
1)
if [ $debug -eq 1 ];then
echo "Restarting Mysql service (1rd soft critical state)..." >>/tmp/ReMysql.log
fi
/usr/bin/ssh nagios@${HostAddress} "sudo /data0/mysql/3306/mysql start"
;;
esac
;;
HARD)
if [ $debug -eq 1 ];then
echo "Restarting Mysql service..." >>/tmp/ReMysql.log
fi
/usr/bin/ssh nagios@${HostAddress} "sudo /data0/mysql/3306/mysql start"
;;
esac
;;
esac
exit 0
注明:测试最好将debug设置为1
申明:本脚本暂时的作用是远程重启mysql,后续还要添加写入数据库的脚本。
检查
Nagios配置文件检查
/usr/local/nagios/bin/nagios –v /usr/local/nagios/etc/nagios.cfg
无错误,重启nagios
Service nagios restart
DB Server端操作:
-----------------------------------------------------------------------------------------------
(1)创建库
create database nagios;
(2)授权
输入以下SQL语句,创建一个具有插入/修改/删除/浏览权限的用户(nagioslog)和密码(nagioslog)(允许nagios监控端远程登录):
GRANT ALL PRIVILEGES ON nagios.* TO 'nagioslog'@'192.168.x.x' IDENTIFIED BY '12345678';
作用:用与插入/修改/删除/浏览数据
(3)以nagioslog用户登录创建log表
create table log(host_ip varchar(50),services_desc varchar(200),plugin_out varchar(500)) ENGINE=MyISAM DEFAULT CHARSET=utf8; Client端操作
-----------------------------------------------------------------------------------------
(1)安装perl操作mysql环境
perl -MCPAN -e "install DBI"
perl -MCPAN -e "install DBD::mysql"
(2)操作mysql脚本
Perl远程操作mysql脚本
#!/bin/perl
#Last Modifed by Hahazhu 2011/08/03
use DBI;
##########INIT DEFINED###########
my $remote_mysql="192.168.x.z";
my $remote_db="nagios";
my $remote_mysql_user="nagioslog";
my $remote_mysql_pwd="12345678";
my $debug=1;
##########Recevice Values#########
my $host_ip=$ARGV[0];
my $service_desc=$ARGV[1];
my $plugin_out=$ARGV[2];
my $dbh = DBI->connect("DBI:mysql:database=$remote_db;host=$remote_mysql", "$remote_mysql_user", "$remote_mysql_pwd", {'RaiseError'
=> 1});
my $rows = $dbh->do("INSERT INTO log (host_ip, services_desc, plugin_out) VALUES ('$host_ip', '$service_desc', '$plugin_out')");
if ($debug){
print "$rows row(s) affected \n";
}
if($debug){
my $sth = $dbh->prepare("SELECT host_ip, services_desc , plugin_out FROM log");
$sth->execute();
while (@data=$sth->fetchrow_array()){
print "$data[0] $data[1] $data[2]\n";
}
}
$dbh->disconnect();
#/bin/sh
HostAddress=$4
Services_desc=$5
Plugin_out=$6
debug=1
if [ $debug -eq 1 ];then
echo "MysqlServer:${HostAddress}" >>/tmp/ReMysql.log
fi
case "$1" in
OK)
;;
WARNING)
;;
UNKNOWN)
;;
CRITICAL)
case "$2" in
SOFT)
case "$3" in
1)
if [ $debug -eq 1 ];then
echo "Restarting Mysql service (1rd soft critical state)..." >>/tmp/ReMysql.log
fi
/usr/bin/perl /usr/local/nagios/libexec/insert_log_to_mysql.pl ${HostAddress} ${Services_desc} ${Plugin_out}
/usr/bin/ssh nagios@${HostAddress} "sudo /data0/mysql/3306/mysql start"
;;
esac
;;
HARD)
if [ $debug -eq 1 ];then
echo "Restarting Mysql service..." >>/tmp/ReMysql.log
fi
/usr/bin/perl /usr/local/nagios/libexec/insert_log_to_mysql.pl ${HostAddress} ${Services_desc} “${Plugin_out}”
/usr/bin/ssh nagios@${HostAddress} "sudo /data0/mysql/3306/mysql start"
;;
esac
;;
esac
exit 0
申明:调试前最好把debug设置为1