Perl Net :: SSH2和缓冲

时间:2015-01-14 17:42:47

标签: perl ssh

使用Net:SSH2模块有一个小的perl脚本

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

my $ssh2 = Net::SSH2->new();
$ssh2->connect('testhost') or die $!;
if ($ssh2->auth_publickey('admin', 'id_rsa.pub', 'id_rsa')) {
print "Connected\n";
} else {
print "failed";
}
my $sess = $ssh2->channel() or die "Unable to create chan\n";
$sess->blocking(1);
$sess->shell();
print $sess "sudo /root/remote.pl\n";
print "$_\n" while <$sess>;
$sess->send_eof;
$sess->close;

执行此操作后,有时我会看到/root/remote.pl的输出,有时我不会。我认为问题在于输出缓冲,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:-1)

如果在linux系统上使用此脚本,为什么不使用perl后倾来使用linux命令而不是使用模块?

示例:

#!/usr/bin/perl
use strict;
use warnings;

# Command
my $cmd = "ssh login:password@host; sudo /root/remote.pl; exit";

# Execute the command
`$cmd`

PS:如果remote.pl脚本有一些打印,你应该看到它们。