2010-10-19 13 views
0

J'essaie d'utiliser Net :: SFTP pour me connecter au serveur distant.Pourquoi Net :: SFTP-> new de Perl se plaignent de "Pas une référence ARRAY"?

Mon script est:

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"; 

Mais quand je lance cela, je reçois une erreur indiquant:

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

Quelqu'un peut-il me aider?

+3

pouvez-vous poster le code entourant la ligne 36 dans votre version de 'Net :: SFTP' ou peut-être juste poster quelle version vous utilisez? –

+0

Toujours poster des exemples complets de scripts afin que nous puissions voir tout ce que vous faites. –

Répondre

5

Ceci est juste un tir sauvage dans le noir, mais l'option user ne devrait pas être dans le hachage remis à ssh_args, il est au même niveau. Essayez d'utiliser ce code à la place:

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"; 

Il semble que le code ci-dessus vous a plus loin, et maintenant vous avez des problèmes parce que votre version de Math::BigInt est trop ancien. Je vois trois façons d'aller de l'avant:

  1. commutateur à une clé RSA au lieu d'une clé DSA
  2. trouver un RPM de Math::BigInt la version 1.78 ou ultérieure
  3. installer manuellement une copie de Math::BigInt

La troisième option est semée d'embûches, et si vous décidez d'aller avec elle, je suggère les étapes suivantes:

  1. installer App::cpanminus
    1. assurez-vous que vous avez un gcc installé
    2. run wget -O- http://cpanmin.us | perl - --local-lib=~/perl5 App::cpanminus
    3. ajouter ~/perl5/bin à votre chemin
  2. installer Math::BigInt dans votre répertoire personnel avec cpanm --local-lib=~/perl5 Math::BigInt
  3. ajouter use lib "$ENV{HOME}/perl5"; au début de votre script afin qu'il puisse trouver les nouveaux modules
+0

yep voir http://search.cpan.org/~dbrobins/Net-SFTP-0.10/lib/Net/SFTP.pm#Net::SFTP-%3Enew%28$host,_%args%29 –

+0

Je regarde dans le code source du module et il semble là sur la ligne 36 comme $ sftp n'est pas un ARRAY REF http://cpansearch.perl.org/src/DBROBINS/Net-SFTP-0.10/lib/Net/SFTP. pm –

+0

@Berov C'est la dernière version, nous ne savons pas quelle version il ou elle utilise. Dans la version 0.10, rien n'est utilisé comme arrayref près de la ligne 36, donc je suppose qu'il utilise une version antérieure d'une version qui a été modifiée. –