как указать имя пользователя и пароль в качестве входа в модуль scp?

Я пытаюсь скопировать файлы с одного хоста на другой хост, используя:

  Net::SCP::Expect

вот моя программа.

use strict;
use Net::SCP::Expect;

print "enter user name\n";
my $username = <>;

print "enter password\n";
my $pass = <>;


print "enter host name\n";
my $host = <>;

my $src_path = "/";
my $dst_path = "/";




my $scpe = Net::SCP::Expect->new(user=>$username, password=>$pass,     auto_yes=> '1');
$scpe->scp($host.":".$src_path, $dst_path);

Я получаю сообщение об ошибке как неверный пароль. Как указать имя пользователя и пароль в качестве входных данных в модуле scp?


person Lokesh Loki    schedule 19.01.2015    source источник


Ответы (1)


Все три переменные, которые вы читаете, также содержат \n в конце.

Удалите его с помощью chomp.

chomp $username;
chomp $pass;
chomp $host;

Помните, что пароль будет виден на экране пользователя. Чтобы избежать эхо символов на экране.

Изменить

chomp изменяет предоставленную переменную и возвращает количество удаленных символов. В вашем случае chomp($username) вернет 1, поскольку он удалил один символ. Вы должны позвонить до scp

#!/usr/bin/perl
use strict;
use warnings;

use Net::SCP::Expect;

print "enter user name\n";
my $username = <>;
chomp($username);             ### Here

print "enter password\n";
my $pass = <>;
chomp($pass);                 ### Here

print "enter host name\n";
my $host = <>;
chomp($host);                 ### Here

my $src_path = '/';
my $dst_path = '/';

my $scpe = Net::SCP::Expect->new(
    user     => $username,
    password => $pass,
    auto_yes => '1'
);
$scpe->scp( $host . ':' . $src_path, $dst_path );

Из связанной документации (выделено мной)

    chomp( LIST )
    chomp   This safer version of "chop" removes any trailing string that
            corresponds to the current value of $/ (also known as
            $INPUT_RECORD_SEPARATOR in the "English" module). It returns the
            total number of characters removed from all its arguments. It's
            often used to remove the newline from the end of an input record
            when you're worried that the final record may be missing its
            newline. When in paragraph mode ("$/ = """), it removes all
            trailing newlines from the string. When in slurp mode ("$/ =
            undef") or fixed-length record mode ($/ is a reference to an
            integer or the like; see perlvar) chomp() won't remove anything.
            If VARIABLE is omitted, it chomps $_. Example:

                while () {
                    chomp;  # avoid \n on last field
                    @array = split(/:/);
                    # ...
                }

            If VARIABLE is a hash, it chomps the hash's values, but not its
            keys, resetting the "each" iterator in the process.

            You can actually chomp anything that's an lvalue, including an
            assignment:

                chomp($cwd = `pwd`);
                chomp($answer = );

            If you chomp a list, each element is chomped, and the total number
            of characters removed is returned.

            Note that parentheses are necessary when you're chomping anything
            that is not a simple variable. This is because "chomp $cwd =
            `pwd`;" is interpreted as "(chomp $cwd) = `pwd`;", rather than as
            "chomp( $cwd = `pwd` )" which you might expect. Similarly, "chomp
            $a, $b" is interpreted as "chomp($a), $b" rather than as
            "chomp($a, $b)".
person Matteo    schedule 19.01.2015
comment
@LokeshLoki Что ты имеешь в виду? Является ли переменная пустой? Куда вы поместили оператор chomp? - person Matteo; 19.01.2015
comment
используйте Net::SCP::Expect; мой $src_path = //*; мой $dst_path = /; #print введите исходный путь\n; #мой $src_path = ‹›; #print введите путь назначения\n; #мой $dst_path = ‹›; мой $scpe = Net::SCP::Expect-›new(); грызть ($ имя пользователя); жевать ($ пройти); $scpe-›логин($имя пользователя, $пароль); $scpe-›scp($host.:.$src_path, $dst_path); - person Lokesh Loki; 20.01.2015
comment
@LokeshLoki Посмотрите документацию и мое редактирование. Вы не должны использовать возвращаемое значение, chomp изменяет данную переменную - person Matteo; 20.01.2015