我正在尝试使用 NET::SSH 从 perl 在远程 Ubuntu 系统中执行命令。我得到了所需的输出,但脚本正在打印大量不需要的数据。我们如何才能阻止它。提前致谢。
这是示例不需要的数据(每次执行都会打印数百次)。
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
我的代码是
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;
}