#!/usr/bin/perl
#
# Remote-Cmd F.Luettgens
########################
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $cgi = "/cgi-bin/remotecmd/remotecmd.cgi";
my $query = CGI->new;
my @configs = $query->param;
my %params = $query->Vars;
my $hostfile = "/usr/local/etc/rup";
print $query->header();
chomp(my $sshbin = `which ssh`);
open my $hosts, '<', $hostfile or die "Couldnt open $hostfile: $!";
my @hostlist = <$hosts>;
close($hosts);
foreach (@hostlist) {
s/i$//;  
;  
; # angehaengtes "i" entfernen
}
my %map = (
exec_cmd => \&exec_cmd,
);
my $output = '';
my $options = join "\n", map{ qq~ ~ }@hostlist;
my $goto = $ENV{PATH_INFO};
$goto =~ s!^/!!;
if( exists $map{$goto} ){
$output = $map{$goto}->(\%params);
print_output( $output );
}
else{
print_html( $options );
}
sub exec_cmd {
my ($paramref) = @_;
my %params = %$paramref;
my $server = $params{'hostlist'};
my $command = $params{'command'};
my $send2all = $params{'allhosts'};
my $output = '';
if ($send2all eq "send2all") {
# ssh connect an alle rechner?
foreach (@hostlist) {
$output .= ssh_connect($_, $command);
}
} else {
$output = ssh_connect($server, $command); &nbs
p; # ssh connect
}
return $output;
}
sub ssh_connect {
my ($server,$command) = @_;
my $output = qx{$sshbin $server $command};
return $output;
}
sub print_html{
my ($options) = @_;
print <