2010-01-08 3 views
3

J'ai un script qui fonctionne sur différents clients et qui a besoin de fichiers SCP pour différents hôtes. En fonction de la combinaison du serveur client &, il peut être nécessaire d'utiliser l'authentification par mot de passe ou l'authentification par clé publique. Je ne peux pas savoir à l'avance lequel utiliser.Net :: SCP/Net :: SCP :: Expect - comment gérer le mot de passe par rapport à l'authentification par clé

Il y a 2 bibliothèques CPAN pour SCP que j'utilise:

  • Net :: SCP: travaille avec authentification par clé publique ne
  • Net :: SCP :: Attendez-vous à: fonctionne avec l'authentification par mot de passe uniquement

Le problème est qu'aucune des bibliothèques ne fonctionne pour les deux authentifications, et je ne sais pas laquelle utiliser à l'avance. Connaissez-vous un moyen de travailler avec les deux schémas d'authentification?

Répondre

5

Essayez une et ne parviennent pas à l'autre:

#! /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

En fait, Net :: SCP ne supporte pas le port non standard :-( – Julien

+0

J'ai essayé, il ne gère pas les deux cas – Julien

0

essayer Net :: OpenSSH

Questions connexes