Thread Net::OpenSSH > nachfolgende, abhängige Kommandos
(11 answers)
Opened by Martin at 2013-09-19 18:32
:)
Ja, die API ist schwach, aber es läuft dann recht zuverlässig. mein kram von damals sah ungefähr so aus: wichtig dabei: a) ->blocking(1), b) ->shell() um ne shell zu bekommen und dann lese ich erstmal leer falls noch ein banner vom server in der shell kommt o.ä. Dann checke ich mit waitforready, dass das ganze funktioniert und dann setze ich mein "ps axuf" ab. Das \n hat bei mir nie Probleme bereitet, Linux sei dank Edit: die längeren sleep-Times bei mir kamen daher, dass ich da auf Maschinen Kram machte, die teilweise extrem überlastet waren, daher habe ich immer ein paar Sekunden zwischen Kommando und Antwortlesen verstreichen lassen. 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 $ssh2->connect($server) or die $!; if ($ssh2->auth_publickey(@auth)) { my $chan = $ssh2->channel(); $chan->blocking(1); $chan->shell(); sleep(2); while(<$chan>) {}; sleep(1); if(!waitforready($chan)) { $chan->close; $ssh2->disconnect(); next SERVER; } print $chan "ps axuf\n"; sleep(5); my %counting = (); my @lines; while(my $line = <$chan>) { push @lines, $line; } } sub waitforready { my $chan = shift; print $chan 'echo "OKCOMPUTER"' . "\n"; my $foundanswer = 0; my $lookedforanswer = 0; while($foundanswer == 0 && $lookedforanswer < 10) { if(my $line = <$chan>) { if($line =~ m/OKCOMPUTER/) { $foundanswer = 1; return 1; } } sleep(1); $lookedforanswer++; } return 0; } Last edited: 2013-09-20 17:55:12 +0200 (CEST) |