为什么Perl的Net :: SFTP-> new抱怨“不是ARRAY参考”?

时间:2010-10-19 14:35:17

标签: perl perl-module

我正在尝试使用Net :: SFTP连接到远程服务器。

我的脚本是:

my %args = ( 
    ssh_args => { 
       user => 'canneu_scp', 
       identity_files => [ '/home/home1/cgrshah/responsys/capgemini.private' ], 
       debug => 1, 
 } );

my $targetserver='files.responsys.net';

my $sftp = Net::SFTP->new($targetserver, %args) 
      or die "could not open connection to $targetserver\n";

但是当我运行这个时,我得到一个错误说明:

 Not an ARRAY reference at /usr/lib/perl5/site_perl/5.8.1/Net/SFTP.pm line 36.

任何人都可以帮我吗?

1 个答案:

答案 0 :(得分:5)

这只是一个在黑暗中的疯狂镜头,但user选项不应该在传递给ssh_args的哈希值中,它处于同一级别。请尝试使用此代码:

my $sftp = Net::SFTP->new(
    $targetserver,
    user     => 'canneu_scp', 
    ssh_args => { 
        identity_files => [ '/home/home1/cgrshah/responsys/capgemini.private' ], 
        debug => 1,
    } 
) or die "could not open connection to $targetserver\n";

听起来上面的代码让你更进一步,现在你遇到了问题,因为Math::BigInt的版本太旧了。我认为有三种方法可以向前发展:

  1. 切换到RSA密钥而不是DSA密钥
  2. 找到Math::BigInt版本1.78或更高版本
  3. 的RPM
  4. 手动安装Math::BigInt
  5. 的副本

    第三种选择有很多陷阱,如果你决定采用它,我建议采取以下步骤:

    1. 安装App::cpanminus
      1. 确保您安装了gcc
      2. 运行wget -O- http://cpanmin.us | perl - --local-lib=~/perl5 App::cpanminus
      3. ~/perl5/bin添加到您的路径
    2. 使用Math::BigInt
    3. cpanm --local-lib=~/perl5 Math::BigInt安装到您的主目录中
    4. use lib "$ENV{HOME}/perl5";添加到脚本的开头,以便它可以找到新模块