Hallo mal wieder...
Heute gehts darum ein cgi zu basteln das eine ssh connection aufbaut, ein kommando absetzt, und den output wieder zurückwirft...
Ich weiss das es so eigendlich funzen sollte weil ichs bei nem "reinen" shell script (ohne den cgi-kram) ausprobiert hab und es ging...
Die übergabe der parameter durchs cgi geht auch, habs mit ein paar print anweisungen getestet...
Ich hab auch mal nachgesehn ob vieleicht usgeführt, aber nichts zurückgegeben wird, im logfile taucht aber nichts auf also geh ich davon aus das der ssh connect garnicht erst initiiert wird?!?!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/perl
#
# Remote-Cmd F.Luettgens
########################
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use HTML::Template;
chomp(my $sshbin = `which ssh`);
my $cgi = "/cgi-bin/remotecmd/remotecmd.cgi";
my $goto = $ENV{PATH_INFO};
my $query = CGI->new;
my @configs = $query->param;
my %params = $query->Vars;
$goto =~ s!^/!!;
chomp(my $hostfile = `echo \$WCOLL`); # hostliste auslesen
open(HOSTS, "$hostfile");
my @hostlist = <HOSTS>;
close(HOSTS);
foreach (@hostlist) {
s/i$//; # angehaengtes "i" entfernen
}
print $query->header; # html header schicken
my %map = ( # function-map
output => \&output,
cmd => \&cmd,
exec_cmd => \&exec_cmd,
);
sub cmd {
my $tmpl = HTML::Template->new( filename => 'cmd.tmpl' );
$tmpl->param( SCRIPT => $cgi );
print $tmpl->output;
}
sub exec_cmd {
my $server = $params{'hostlist'};
my $command = $params{'command'};
my $send2all = $params{'allhosts'};
if ($send2all eq "send2all") { # ssh connect an alle rechner?
foreach (@hostlist) {
sshconnect($_, $command);
print ("Output: $_[0]");
}
} else {
ssh_connect($server, $command); # ssh connect
print("Output: $_[0]");
}
}
sub ssh_connect {
my @output = (system("$sshbin $_[0] $_[1]"));
return @output;
}
if( exists $map{$goto} ){
$map{$goto}->();
}
else{
my $tmpl = HTML::Template->new( filename => 'default.tmpl' );
$tmpl->param( SCRIPT => $cgi );
print $tmpl->output;
}
kurzer nachtrag zum verbindungsaufbau:
wir arbeiten mit hostkeys, es kommt also keine passwortabfrage...\n\n
<!--EDIT|FlorianL|1181727224-->