http://qs321.pair.com?node_id=710372


in reply to Re: A little demo for Net::SSH2
in thread A little demo for Net::SSH2

To use Shell method on Active Perl on windows use:

#!/usr/bin/perl
use warnings;
use strict;
use NET::SSH2;

my $host = ""; # use the ip host to connect
my $user = ""; # your account
my $pass = ""; # your password

my ($len, $buf);

my $ssh2 = Net::SSH2->new();
#$ssh2->debug(1);
if ($ssh2->connect($host)) {
if ($ssh2->auth_password($user,$pass)) {
#shell use
my $chan = $ssh2->channel();
$chan->shell();

$chan->write("ls -a\n");
select(undef,undef,undef,0.2);
print $buf while ($len = $chan->read($buf,512)) > 0;

$chan->write("who\n");
select(undef,undef,undef,0.2);
print $buf while ($len = $chan->read($buf,512)) > 0;
#$chan->send_eof();
$chan->close;
} else {
warn "auth failed.\n";
}
} else {
warn "Unable to connect Host $@ \n";
}

Replies are listed 'Best First'.
Re: To use Shell method on Active Perl
by mvrk (Initiate) on Feb 09, 2009 at 19:20 UTC
    is it possible to poll the shell for timeouts just like this example:
    $chan->exec("ls -l"); my $poll = { handle => $chan, events => -1 }; while ($ssh2->poll(500, [ $poll ])) { if ($poll->{revents}{out}) { while (<$chan>) { $r=$r.$_; } } if ($poll->{revents}{channel_closed} || $poll->{revent +s}{listener_closed}) { my $exit = $chan->exit_status(); print $r; } } print "timeout\n";
    This works fine for $chan->exec(..), but i need shell to execute more than one command, can someone help me with some code to poll the shell writes and reads for timeouts???