[MP 101]
host = 127.0.0.1
user = username
psw = password
port = 22
[MP 100]
host = 127.0.0.1
user = username
psw = password
port = 22
####
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use Fcntl qw(:flock);
use Config::IniFiles;
use Net::OpenSSH::Parallel;
select STDOUT; $| = 1;
select STDERR; $| = 1;
my $timeout = 20;
my %sudo_passwords = ();
sub devices {
my $path = 'conf.ini';
open my $fh , '<' , "".$path.""
or die "Could not open file: ".$path." - $!\n";
flock( $fh , LOCK_SH )
or die "Could not lock '".$fh."' - $!\n";
tie my %ini, 'Config::IniFiles', ( -file => "".$path."" )
or die "Error: IniFiles->new: @Config::IniFiles::errors";
close ( $fh )
or die "Could not close '".$fh."' - $!\n";
my @mps = keys ( %ini );
my $maximum_workers = @mps;
my $maximum_connections = 2 * $maximum_workers;
my $maximum_reconnections = 3;
my %opts = ( workers => $maximum_workers,
connections => $maximum_connections,
reconnections => $maximum_reconnections );
my $pssh = Net::OpenSSH::Parallel->new(%opts);
foreach my $hash ( @mps ) {
$pssh->add_host( $ini{$hash}{host} ,
user => $ini{$hash}{user},
port => $ini{$hash}{port},
passwd => $ini{$hash}{psw} );
$sudo_passwords{$ini{$hash}{host}} = $ini{$hash}{psw};
}
my @cmd = ( "sudo service ntp stop" ,
"sudo ntpd -gq" ,
"sudo service ntp start" );
sub sudo {
my ($label, $ssh, @cmd) = @_;
$ssh->system({stdin_data => "$sudo_passwords{$label}\n"},
'sudo', '-Skp', '', '--', @cmd);
}
$pssh->push('*', parsub => \&sudo, @cmd);
#$pssh->push( '*' , command => 'ls' , '/home/username/Downloads' );
$pssh->run;
return %ini;
} # end sub complex
my %results = devices();
####
Enter Password: Enter Password: sudoerssudoers: sudo service ntp stop: command not found
Request rejected by Privilege Manager
: sudo service ntp stop: command not found
Request rejected by Privilege Manager
####
sub sudo {
my ($label, $ssh, @cmd) = @_;
foreach my $c (@cmd) {
$ssh->system( {stdin_data => "$sudo_passwords{$label}\n"} ,
'sudo' , '-Skp' , '' , '--' , split " " , $c );
( $dev_data{$label}= $_ ) if ( $_ !~ /ntpd$/ );
}
}