Net :: SCP / Net :: SCP :: Attendez-vous - comment traiter avec mot de passe vs authentification par clé
Question
J'ai un script qui fonctionne sur différents clients, et ont besoin de fichiers SCP à différents hôtes. En fonction de la combinaison de client et serveur, je peux avoir besoin d'utiliser l'authentification par mot de passe ou l'authentification par clé publique. Je ne peux pas vraiment savoir à l'avance que l'on à utiliser.
Il y a 2 bibliothèques CPAN pour SCP que j'utilise:
- Net :: SCP: travaille avec authentification par clé publique uniquement
- Net :: SCP :: Attendez-vous à: fonctionne avec l'authentification par mot de passe uniquement
Le problème est que ni les travaux de bibliothèque pour les authentifications, et je ne sais pas lequel utiliser à l'avance. Connaissez-vous un moyen de travailler avec les deux schémas d'authentification?
La solution
Essayez l'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 $@;
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";
}
}
Autres conseils
essayer Net :: OpenSSH
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow