使用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
的输出,有时我不会。我认为问题在于输出缓冲,但我不知道如何解决这个问题。
答案 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脚本有一些打印,你应该看到它们。