Net :: SCP / Net :: SCP :: Attendez-vous - comment traiter avec mot de passe vs authentification par clé

StackOverflow https://stackoverflow.com/questions/2030044

  •  19-09-2019
  •  | 
  •  

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?

Était-ce utile?

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
scroll top