I am trying to use NET::SSH to execute a command in a remote Ubuntu system from perl.I got the desired output but along with it the script is printing lots of unwanted data.How can we stop it. Thanks in advance.
Here is the sample unwanted data (same this is getting printed hundreds of times for each execution).
Net::SSH2::Channel::read(size = 1, ext = 0)
- read 1 bytes
- read 1 total Net::SSH2::poll: timeout = 250, array[1]
- [0] = channel
- [0] events 1
- libssh2_poll returned 1
- [0] revents 1 Net::SSH2::Channel::read(size = 1, ext = 0)
- read 1 bytes
- read 1 total Net::SSH2::poll: timeout = 250, array[1]
- [0] = channel
- [0] events 1
- libssh2_poll returned 1
- [0] revents 1 Net::SSH2::Channel::read(size = 1, ext = 0)
- read 1 bytes
- read 1 total
And my code is
use warnings;
use strict;
use NET::SSH2;
use Data::Dumper;
my $auth;
sub is_sshalive;
my $host = ""; # use the ip host to connect
my $user = "ubuntu"; # your account
my $cmd;
my $ssh2 = Net::SSH2->new();
$ssh2->debug(1);
$ssh2->connect($host,"22") or die "connect failed";
$ssh2->auth_publickey(
'ubuntu',
'publickey',
'privatekey'
) or die "auth failed";
print "\n Executing command...\n";
$cmd = "ls -al";
print " ==> Running $cmd\n";
if(is_sshalive($ssh2) == 1) {
print "\nSSH connection died";
exit 1;
} else {
run_testsuite($cmd, $ssh2);
# echo $ssh2->exec("ls");
}
print "test passed done 0\n";
sub run_testsuite {
my $cmd = $_[0];
my $ssh2 = $_[1];
my $chan2 = $ssh2->channel();
$chan2->shell();
my @arr;
print $chan2 "$cmd \n";
print $chan2 "pwd \n";
push @arr,$_ while <$chan2>;
print @arr;
$chan2->close;
return 0;
}
sub is_sshalive {
my $ssh2 = $_[0];
print "isalive-shiva";
if ($ssh2->poll(1000) == 0) {
return 0; # passed
} else {
return 1; #failed
}
return 0;
}
Changed
$ssh2->debug(1);
to$ssh2->debug(0);
and now its printing all appropriate data.