更高ping网络上的Net :: SSH2

时间:2013-09-20 14:38:41

标签: perl ssh

<$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];
}

1 个答案:

答案 0 :(得分:1)

使用Net::SSH::Any

几天前,我发布了0.04版,修复了我们正在讨论的两个问题:

  • 未经检查的channel
  • 来电
  • Net::SSH2后端的超时支持。它仍然不完美,因为OpenSSH和libssh2都不支持向远程进程发送信号以终止它,因此,模块只关闭stdio流并希望远程程序最终在下次尝试写入时收到SIGPIPE