Slight fixes for password handling.
authorFlavio Poletti <flavio@polettix.it>
Mon, 8 Feb 2010 11:28:41 +0000 (8 12:28 +0100)
committerFlavio Poletti <flavio@polettix.it>
Mon, 8 Feb 2010 11:28:41 +0000 (8 12:28 +0100)
deploy

diff --git a/deploy b/deploy
index 3f28bdb..7fd3a2d 100755 (executable)
--- a/deploy
+++ b/deploy
@@ -51,8 +51,12 @@ pod2usage(-verbose => 99, -sections => 'USAGE',
 my @hostnames = @ARGV;
 @ARGV = ();
 
-$config{password} = prompt 'password: ', -e => '*'
-  unless exists $config{password};
+if (exists $config{password}) {
+   $config{interactive} = 1;
+   $config{identity_files} = [];
+   $config{password} = prompt 'password: ', -e => '*'
+      unless $config{password};
+}
 
 ($config{remote} = $config{script}) =~ s{[^\w.-]}{}mxsg;
 $config{remote} = catfile($config{dir}, $config{remote});
@@ -120,12 +124,19 @@ sub make_path {
    return;
 } ## end sub make_path
 
+sub _get_optionals {
+   map { $_ => $config{$_} } grep { exists $config{$_} } qw( interactive identity_files password );
+}
+
 sub get_ssh {
    my ($hostname) = @_;
+   my %optional;
+
    my $ssh = Net::SSH::Perl->new(
       $hostname,
       protocol => 2,
       debug    => $config{debug},
+      _get_optionals(),
    );
    $ssh->login($config{username}, $config{password}, 'suppress_shell');
 
@@ -143,6 +154,8 @@ sub get_sftp {
          protocol    => 2,
          debug       => $config{debug},
          compression => $config{compress},
+         user        => $config{username},
+         _get_optionals(),
       }
    );
 } ## end sub get_sftp
@@ -200,7 +213,8 @@ key authentication in favour of username/password authentication. Don't
 ask me why, this may change in the future. Anyway, you're not obliged
 to provide either on the command line: the username defaults to C<root>,
 and you'll be prompted to provide a password if you don't put any
-on the command line. The prompt does not show the password on the terminal.
+on the command line but specify the C<--password|-p> option without a value.
+The prompt does not show the password on the terminal.
 
 By default, L<Net::SSH::Perl> will try to use public/private key
 authentication. If you're confident that this method will work, you can