2010-10-19 92 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

相關問題