2010-01-08 49 views
3

我有一個腳本可以在不同的客戶端上運行,並且需要SCP文件到不同的主機。根據客戶端&服務器的組合,我可能需要使用密碼認證或公鑰認證。我無法預先知道使用哪一個。Net :: SCP/Net :: SCP :: Expect - 如何處理密碼與密鑰認證

有2個CPAN庫SCP,我使用:

  • 的Net :: SCP:可與公鑰認證只
  • 的Net :: SCP ::期待:作品只有
  • 密碼認證

問題是這兩個庫都不適用於這兩種認證,我不知道哪一個可以提前使用。你知道有兩種認證方案可以使用嗎?

回答

5

嘗試之一,故障轉移到另一個:

#! /usr/bin/perl 

use warnings; 
use strict; 

use Net::SCP qw/ scp /; 
use Net::SCP::Expect; 

my @hosts = qw/ host1 host2 host3 /; 
my $user = "YOUR-USERNAME-HERE"; 
my $pass = "PASSWORD-GOES-HERE"; 
my $file = "file-to-copy"; 

foreach my $host (@hosts) { 
    my $dest = "$host:$file"; 

    my $scp = Net::SCP->new($host, $user); 
    unless ($scp->scp($file => $dest)) { 
    my $scpe = Net::SCP::Expect->new; 
    $scpe->login($user, $pass); 

    local [email protected]; 
    eval { $scpe->scp($file => $dest) }; 
    next unless [email protected]; 

    warn "$0: scp $file $dest failed:\n" . 
     "Public key auth:\n" . 
     " $scp->{errstr}\n" . 
     "Password auth:\n" . 
     " [email protected]\n"; 
    } 
} 
+1

其實,網:: SCP不支持:-( – Julien 2010-01-26 18:23:37

+0

我試過非標準端口,它不處理這兩種情況 – Julien 2010-01-26 18:58:02

0

試驗網:: OpenSSH的