my @poll = ({handle => $chan, events => 'in'});
if($ssh2->poll(250, \@poll) && $poll[0]->{revents}->{in}) {
print $buf while defined ($len = $chan->read($buf,512))
}
####
my ($rin, $rout, $ein, $eout) = ('', '', '', '');
vec($rin, $chan, 1) = 1; # tried $ssh2 and $chan,
# but should be: fileno($var) which errors
if (select($rout=$rin, undef, $eout=$ein, 5000)) {
print $buf while defined ($len = $chan->read($buf,512))
}
##
##
#!/usr/bin/perl
use strict;
use warnings;
use Net::SSH2;
use Term::ReadLine;
my $host = '10.254.254.1';
my $user = 'cisco';
my $pass = 'cisco';
my ($len, $buf);
my $ssh2 = Net::SSH2->new();
if ($ssh2->connect($host)) {
print "[Connected]\n";
if ($ssh2->auth_password($user, $pass)) {
print "[Authenticated]\n";
# Set up shell for interactive
my $chan = $ssh2->channel();
$chan->blocking(0); # Needed on Windows
$chan->shell();
#binmode($chan); # Seems to take care of both Unix SSH and Cisco servers
# Sometimes needed to "clear", flush() doesn't seem to work
# Otherwise, first command does not work
select(undef,undef,undef,0.2); # or sleep 1
print $buf while defined ($len = $chan->read($buf,512));
# START: Interactive Mode
my $prompt = "ssh> ";
my $ssh = Term::ReadLine->new("SSH");
$ssh->ornaments(0);
while (defined (my $cmd = $ssh->readline($prompt))) {
chomp $cmd;
if ($cmd =~ /^\s*$/) { next } # nothing
if ($cmd =~ /^\s*exit\s*$/) { last } # exit
$chan->write("$cmd\n");
select(undef,undef,undef,0.2); # or sleep 1
print $buf while defined ($len = $chan->read($buf,512))
}
# END: Interactive Mode
$chan->close
} else {
warn "Authentication failed\n"
}
} else {
warn "Unable to connect to host $host: $!\n"
}