从<$chan>
读取似乎是空列表,它主要发生在较高延迟网络上的主机上。是否有更强大的与远程主机交互的方式?
use Net::SSH2;
# my $ssh = Net::SSH2->new();
# ...
my $chan = $ssh->channel() or die "no channel\n";
$chan->blocking(1); # even worse with $chan->blocking(0);
$chan->shell();
print $chan "ps -ef\n";
print <$chan>;
修改
使用Net::SSH::Any
,
无法在lib / Net / SSH / Any / Backend / Net_SSH2.pm第133行的未定义值上调用方法“exec”。
sub _capture {
my ($any, $opts, $cmd) = @_;
my $ssh2 = $any->{be_ssh2} or return;
my $channel = $ssh2->channel;
my ($out_fh, $err_fh) = __parse_fh_opts($any, $opts, $channel) or return;
$out_fh and die 'Internal error: $out_fh is not undef';
# vvvvvvvvvvvvvv
$channel->exec($cmd); # <--- LINE 133
# ^^^^^^^^^^^^^^
(__io3($any, $ssh2, $channel, $opts->{stdin_data}, undef, $err_fh || \*STDERR))[0];
}
答案 0 :(得分:1)
几天前,我发布了0.04版,修复了我们正在讨论的两个问题:
channel
Net::SSH2
后端的超时支持。它仍然不完美,因为OpenSSH和libssh2都不支持向远程进程发送信号以终止它,因此,模块只关闭stdio流并希望远程程序最终在下次尝试写入时收到SIGPIPE