Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]9084[/thread]

SSH Script zur Massenabfrage: kein fehler, kein log, na supi... (Seite 2)

Leser: 2


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
FlorianL
 2007-06-14 10:38
#77487 #77487
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
moin zusammen :)

danke dir renee, aber ich hab noch ein paar fragen:

im moment macht er nur nen connect auf den ersten server in der liste, auch bei der allhosts funktion, warum ist mir nicht verständlich.

und ich hab gerade versucht ein simples <br> hinter jeden @output zu schalten, habs aber nicht hinbekommen, entweder hab ichs davor, oder dahinter stehn aber nicht hinter jeder line...

foreach (@hostlist) {
# funzt, gibt aber den ganzen block zurück ohne <br>
$output .= (ssh_connect($_, $command));
# schreibt unter den output block
print "<br>";
# funzt einfach garnich
$output .= ((ssh_connect($_, $command)) <br>);
}
renee
 2007-06-14 10:42
#77488 #77488
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann mach:
Code (perl): (dl )
1
2
3
4
5
6
sub ssh_connect {
    my ($server,$command) = @_;
    my @lines = qx{$sshbin $server $command};
    my $output = join "<br />", @lines;
    return $output . "<br />";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
FlorianL
 2007-06-15 13:39
#77489 #77489
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
danke ;)

Also ich habs dann ma rausbekommen warum der nur zum ersten host connected hat, und zwar musste ich noch das newline für jeden host in der @hostlist entfernen

nuja, es geht alles, aber da ich wieder viel zu viel "fremd-code" von euch drin hab, hab ich nun schwierigkeiten weiter zu kommen, und zwar möchte ich einfach nur das der hostname über dem betreffenden @output erscheint...

Das ist der aktuelle (gut funktionierende) code:

Code (perl): (dl )
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/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$//;
}

my %map = (
       exec_cmd        => \&exec_cmd,
);

my $output  = '';
my $options = join "\n", map{ qq~  <option value="$_">$_</option>~ }@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 (( $command =~ m/^rm/ ) or ( $command =~ m/^ping/ ) or ( $command =~ m/^login/ ) or ( $command =~ m/^ftp/ ) or ( $command =~ m/^telnet/ ) or ( $command =~ m/^rsh/ )) {
        die "Command $command ist nicht erlaubt!";
    }
    if ($send2all eq "send2all") {
        foreach (@hostlist) {
               chomp;
               $output .= (ssh_connect($_, $command));
        }
    } else {
        chomp $server;
        $output = ssh_connect($server, $command);
    }
    return $output;
}
sub ssh_connect {
    my ($server,$command) = @_;
    my @lines = qx{$sshbin -T $server $command};
    my $output = join "<br />", @lines;
    return $output . "<br />--<br />";
}
sub print_html{
    my ($options) = @_;
    print <<EOT;
<html>
<body>
<form name="remotecmd" method="post" action="./remotecmd.cgi/exec_cmd" target="_down">
<table width="812" border="0" align="center">
<tr>
<td width="94">Hostname</td>
<td width="86"> </td>
<td width="610">Command:</td>
</tr>
<tr>
<td><select name="hostlist" id="hostlist">
$options
</select></td>
<td> </td>
<td><input name="command" type="text" id="command" value="uname -a" size="70"></td>
</tr>
<tr>
<td><input type="radio" name="allhosts" value="send2all">Alle Hosts </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td><input type="submit" name="Submit" value="Absenden"></td>
<td><input name="cancel" type="reset" id="cancel" value="Zurücksetzen"></td>
<td> </td>
</tr>
</table>
<p> </p>
</form>
</body>
</html>
EOT
}
sub print_output{
    my ($out) = @_;
    print ("$out");
}


Wünsche euch schonmal ein schönes Wochenende :)
renee
 2007-06-15 13:45
#77490 #77490
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
    if ($send2all eq "send2all") {
       foreach (@hostlist) {
              chomp;
              $output .= $_ . "<br />" . (ssh_connect($_, $command));
       }
   } else {
       chomp $server;
       $output = $server . '<br />' . ssh_connect($server, $command);
   }
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
FlorianL
 2007-06-18 11:13
#77491 #77491
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
Guten Morgen! :)

Wieder mal ne ne Frage:

Ich lasse mir jetzt die Server zu dennen nicht connected werden kann in einer extra box anzeigen und wollte die aus dem output rausnehmen. Bei nem Array würd ich wohl shift nehmen, aber wie mach ichs denn hier?

die exec_cmd sub sieht nun so aus:

Code (perl): (dl )
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
sub exec_cmd {
        my ($paramref) = @_;
        my %params   = %$paramref;
        my $server   = $params{'hostlist'};
        my $command  = $params{'command'};
        my $send2all = $params{'allhosts'};
        my $output   = '';
        if (( $command =~ m/^rm/ ) or ( $command =~ m/^ping/ ) or ( $command =~ m/^login/ ) or ( $command =~ m/^ftp/ ) or ( $command =~ m/^telnet/ ) or ( $command =~ m/^rsh/ )) {
               
 die "Command $command ist nicht erlaubt!";
        }
        if ($send2all eq "send2all") {
               
 unlink($error);
               
 foreach (@hostlist) {
               
         chomp;
               
         $output .= $_ . "<br />\n" . (ssh_connect($_, $command));
               
         if ((ssh_connect($_, $command)) eq "<br><hr>") {
               
               
  open(ERRORFILE,">>$error") || die "Kann $error nicht oeffnen!";
               
               
  our $errormsg = '1';
               
               
  print ERRORFILE ("<font color=\"FF0000\">Warnung:</font> Kann mich nicht auf <b>$_</b> einloggen.<br>\n");
               
         }
               
 }
        } else {
               
 chomp $server;
               
 $output = $server . '<br />' . ssh_connect($server, $command);
        }
        if ($errormsg == '1') {
               
 print ("<;script type=\"text/javascript\"> F1 = window.open(\"$error_rel\", \"Fenster1\", \"width=350,height=400,left=0,top=0\"\)\;</script>\n");
               
 close(ERRORFILE);
        }
        return $output;
        unlink($error);
}
FlorianL
 2007-06-18 11:46
#77492 #77492
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
und noch etwas, wie kann ich die ouput zeile weiter anpassen, bzw. was hindert mich daran?

$output = ($server . '<br />' . ssh_connect($server, $command)); <- so isses

my $table = "<table bla>";
$output = ($table $server . '<br />' . ssh_connect($server, $command));


funzt aber nicht, warum? was bewirken die punkte genau? (ist ziemlich schwer die zu googlen)

edit:

$word1="light";
$full_string=$word1 . "house";

Of course, we again get the value of lighthouse for the $full_string variable. Here is the list for these two string operators:

Operator Function
. Concatenate Strings
.= Concatenate and Assign


Gefunden hab ichs, aber ich versteh es nicht :'(
muss ich nicht den punkt zum zusammenführen so benutzen?

$output = (. '<td>' . $server . '<br />' . ssh_connect($server, command));\n\n

<!--EDIT|FlorianL|1182155950-->
renee
 2007-06-18 13:12
#77493 #77493
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Der Punkt hängt zwei Strings aneinander.

So wird aus:
Code (perl): (dl )
1
2
3
4
5
6
my $string1 = 'light';
my $string2 = 'house';

my $string3 = $string1 . $string2; 

print $string1, " # ", $string2, " # ", $string3, "\n";


Mit .= wird an den bestehenden String der zweite String angehängt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
my $string1 = 'light';
my $string2 = 'house';

print $string1, " # ", $string2,"\n";

$string1 .= $string2;

print "String1 neu: $string1 # String2: $string2\n";
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
FlorianL
 2007-06-18 13:43
#77494 #77494
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
aber wieso funktioniert dann das hier nicht?!

$output .= ("<table bla>" . $_ . "<br />\n" . (ssh_connect($_, $command)));

aber wenn ich es vorher als var deklariere geht es, wär zwar ein workaround, aber ne tolle lösung ists nicht, also warum funktioniert die obere zeile nicht?\n\n

<!--EDIT|FlorianL|1182160792-->
renee
 2007-06-18 14:09
#77495 #77495
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Prinzipiell funktioniert es. Bekommst Du eine Fehlermeldung??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
FlorianL
 2007-06-18 15:04
#77496 #77496
User since
2007-05-18
142 Artikel
BenutzerIn
[default_avatar]
nein, ich weiss nicht wieso ich eben fehler hatte?!?!?

seltsam... naja.. es funzt, tabellen ausgabe horray ;)

der allerletzte punkt auf der tagesordnung ist die filterung von den einträgen auf die kein login vollzogen werden kann, die einträge müssen quasi aus dem outout gelöscht werden, bei nem array würd ich doch shift nehmen oder?
aber was passiert bei nem $var ?
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2007-06-13 13:26.