如何给用户名和密码,在SCP模块的输入?(how to give user name and pas

2019-10-21 15:35发布

我想一个文件从一台主机使用另一台主机复制:

  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);

我收到错误坏password.how给用户名和密码,在SCP模块的输入?

Answer 1:

所有这三个变量,你也读包含\n结尾。

与删除它chomp

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

要注意的是密码将是用户的屏幕上显示。 你可以看看期限:: ReadPassword以避免在屏幕上回显字符。

编辑

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)".


文章来源: how to give user name and password as a input in scp module?