我正在尝试连接到远程服务器并在我的Perl脚本中运行ssh命令。我提供了正确的端口,主机,用户名和密码。使用相同的凭据,我可以通过终端正确登录。当我在代码中提供相同内容时,我会收到错误响应。请帮忙。
这是我的代码:
use strict;
use Net::SSH::Perl;
my $hostname = "xxx.zzz.ccc.vvv";
my $username = "username";
my $password = "password";
my $cmd = "aws --version";
my $ssh = Net::SSH::Perl->new("$hostname", debug=>0, port=> 56789);
$ssh->login("$username","$password");
my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd");
print $stdout;
以下是输出:
Received disconnect message: Too many authentication failures for username
at /usr/local/lib/x86_64-linux-gnu/perl/5.26.0/Net/SSH/Perl/AuthMgr.pm line 157.
答案 0 :(得分:2)
您的密码在双引号内指定,Perl将在双引号内插入标量和数组变量。
$password = "qwer@345"; print $password; # "qwer"
如果使用双引号将字符串引起来,则必须转义该字符串中的所有特殊字符,例如$
,@
,"
或\
。
$password = "qwer\@345"; print $password; # "qwer@345"
或使用单引号-Perl不在单引号内进行插值。
$password = 'qwer@345'; print $password; # "qwer@345"
如果您use warnings
(总是use warnings
,不是吗?),有时您用双引号写的内容可能会被误解时,Perl会警告您。