由于使用CACTI监控软件需要将受控服务器snmpd.conf文件添加授权主机,如果在大量集群坏境下,这样一个一个主机的配置效率会很低,所以我近期编写了一个多线程的同步配置文件脚本来实现此功能。
#!/usr/bin/env perl
use warnings;
use strict;
use Net::OpenSSH;
use threads;
my @th_list;
my $user = 'root';
my %param = (
user => $user,
timeout => 30
);
my %hosts = (
‘你的主机名’=> '主机IP',
);
#
#MAIN
#
my @hostgrp = &ipLoop;
foreach (@hostgrp) {
push @th_list, threads->create(\&mutiSCP, $_);
}
foreach (0..$#hostgrp){
$th_list[$_]->join();
}
print "\tDone!\n";
#
#FUNCTION
#
sub ipLoop {
my @all_ip;
foreach (values(%hosts)) {
my @split_ip = split / /,$_;
foreach (@split_ip) {
push @all_ip,$_;
}
}
return @all_ip;
}
sub mutiSCP{
my $host = shift;
my $ssh = Net::OpenSSH->new($host, %param);
$ssh->scp_put("/etc/default/snmpd", "/etc/default/") or die "can't connect $!".$ssh->error;
$ssh->scp_put("/etc/snmp/snmpd.conf", "/etc/snmp/") or die "can't connect $!".$ssh->error;
my ($stdout, $stderr) = $ssh->capture2("/etc/init.d/snmpd restart");
if (!$stdout and $stderr) {
print $ssh->error;
print $stderr;
}else{
print "<$_>".$stdout;
}
}