2010-10-19 48 views
0

我想使用Net :: SFTP来连接到远程服务器。为什么Perl的Net :: SFTP-> new抱怨“不是ARRAY参考”?

我的脚本是:

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. 

谁能帮助我?

+3

你可以在你的Net :: SFTP版本中发布第36行的代码,也可以发布你正在使用的版本吗? – 2010-10-19 15:06:25

+0

总是发布完整的示例脚本,以便我们可以看到你正在做的一切。 – 2010-10-19 19:49:56

回答

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. 找到的1.78 Math::BigInt或更高版本
  3. 的RPM手动安装的Math::BigInt
副本

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

  1. 安装App::cpanminus
    1. 确保你有一个gcc安装
    2. 运行wget -O- http://cpanmin.us | perl - --local-lib=~/perl5 App::cpanminus
    3. 添加~/perl5/bin到您的路径
  2. 安装Math::BigInt到你的home目录与cpanm --local-lib=~/perl5 Math::BigInt
  3. 添加use lib "$ENV{HOME}/perl5";到开始您的脚本,以便它可以找到新模块
+0

yep见http://search.cpan.org/~dbrobins/Net-SFTP-0.10/lib/Net/SFTP.pm#Net::SFTP-%3Enew%28$host,_%args%29 – 2010-10-19 15:20:06

+0

我看在模块的源代码中,并且它看起来像第36行一样,$ sftp不是一个ARRAY REF http://cpansearch.perl.org/src/DBROBINS/Net-SFTP-0.10/lib/Net/SFTP。 pm – 2010-10-19 15:27:08

+0

@Berov这是最新的版本,我们不知道他或她正在使用什么版本。在版本0.10中,第36行附近没有任何用作arrayref的地方,所以我假定他或她正在使用已修改版本的早期版本。 – 2010-10-19 15:37:50

相关问题