Net::OpenSSH的一个bug

因为想使用Net:OpenSSH的时候能forward_agent,就测试了一下最新版本的Net::OpenSSH.结果比较杯具的是发现forward_agent参数指定后不顶用。
仔细看了一下模块的代码,作者貌似是犯了一个比较低级的错误。有2处是
if ($self->{_forward_agent}) {
my $forward_agent = delete $opts{forward_agent};
push @ssh_opts, ($forward_agent ? ‘-A’ : ‘-a’) if defined $forward_agent;
}
这里实际是如果输入的时候定义了forward_agent就给ssh_opts加一个-A,表示开启转发。但是作者却还是从$opts{forward_agent}里面取。实际上第一次这样取值后,这个就被delete掉了。
我直接改了一下代码,patch如下
pm@debian:~$ cat OpenSSH.diff
1160,1162c1160,1161
< if ($self->{_forward_agent}) {
< my $forward_agent = delete $opts{forward_agent}; < push @ssh_opts, ($forward_agent ? '-A' : '-a') if defined $forward_agent; --- > if (defined $self->{_forward_agent}) {
> push @ssh_opts, ($self->{_forward_agent} ? ‘-A’ : ‘-a’);
1294,1296c1293,1294
< if ($self->{_forward_agent}) {
< my $forward_agent = delete $opts{forward_agent}; < push @ssh_opts, ($forward_agent ? '-A' : '-a') if defined $forward_agent; --- > if (defined $self->{_forward_agent}) {
> push @ssh_opts, ($self->{_forward_agent} ? ‘-A’ : ‘-a’);

修改后终于OK了。

================
UPDATE:
和模块的作者联系过,模块没有bug,只是使用的时候需要直接传入参数

my $out=$ssh->capture({“forward_agent” => 1},$cmd);

此条目发表在System分类目录。将固定链接加入收藏夹。

发表评论