我正在尝试使用以下方法将文件从一个主机复制到另一个主机:
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模块中输入用户名和密码?
答案 0 :(得分:1)
您正在阅读的所有三个变量最后都包含\n
。
使用chomp
chomp $username;
chomp $pass;
chomp $host;
请注意密码将在用户屏幕上显示。您可以查看Term::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)".