3

さまざまなクライアントで動作するスクリプトがあり、さまざまなホストにファイルをSCPする必要があります。クライアントとサーバーの組み合わせによっては、パスワード認証または公開鍵認証を使用する必要がある場合があります。どちらを使うかは事前にわかりません。

私が使用しているSCP用のCPANライブラリは2つあります。

  • Net :: SCP:公開鍵認証でのみ機能します
  • Net :: SCP :: Expect:パスワード認証でのみ機能します

問題は、どちらのライブラリも両方の認証で機能しないことと、どちらを使用するかを事前に知らないことです。両方の認証スキームを使用する方法を知っていますか?

4

2 に答える 2

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 $@;
    eval { $scpe->scp($file => $dest) };
    next unless $@;

    warn "$0: scp $file $dest failed:\n" .
         "Public key auth:\n" .
         "    $scp->{errstr}\n" .
         "Password auth:\n" .
         "    $@\n";
  }
}
于 2010-01-08T22:44:52.543 に答える
0

Net::OpenSSHを試してください

于 2010-01-12T21:50:17.357 に答える