我正在使用Net::SSH::Perl在远程服务器上执行命令,如下所示:

use Net::SSH::Perl;
my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my ($stdout, $stderr, $exit) = $ssh->cmd($cmd);

但是当我执行上述脚本时,再次出现密码提示。表示我在$ pass中提供的密码未用于建立ssh连接。为什么是这样?知道我该如何克服吗?我在下面给出调试信息:
serv1: Reading configuration data /root/.ssh/config
serv1: Reading configuration data /etc/ssh_config
serv1: Allocated local port 1023.
serv1: Connecting to 15.154.59.63, port 22.
serv1: Remote protocol version 1.99, remote software version OpenSSH_4.2
serv1: Net::SSH::Perl Version 1.34, protocol version 1.5.
serv1: No compat match: OpenSSH_4.2.
serv1: Connection established.
serv1: Waiting for server public key.
serv1: Received server public key (768 bits) and host key (1024 bits).
serv1: Host '15.154.59.63' is known and matches the host key.
serv1: Encryption type: DES3
serv1: Sent encrypted session key.
serv1: Received encryption confirmation.
serv1: RSA authentication failed: Can't load public key.
serv1: Doing challenge response authentication.
Password:

The password prompt should not be coming right, given that I have already supplied the password in $pass variable?

UPDATE(Based on the comments received):

I tried the following:

my $ssh = Net::SSH::Perl->new($host, debug =>1, identity_files => []);

现在,我没有收到“RSA身份验证失败:”消息,但仍然出现密码提示。我在下面给出调试信息:

serv1:已分配的本地端口1023。
serv1:连接到15.154.59.63,端口22。
serv1:远程协议(protocol)版本1.99,远程软件版本OpenSSH_4.2
serv1:Net::SSH::Perl版本1.34,协议(protocol)版本1.5。
serv1:无兼容匹配:OpenSSH_4.2。 kf-linux-dm3:建立连接。
serv1:正在等待服务器公钥。
serv1:接收到的服务器公用密钥(768位)和主机密钥(1024位)。
serv1:主机“15.154.59.63”是已知的,并且与主机密钥匹配。
serv1:加密类型:DES3
serv1:发送加密的 session 密钥。
serv1:收到加密确认。
serv1:执行质询响应身份验证。
密码:

有人可以启发我吗?

最佳答案

此行中的错误:

告诉我您的程序正在尝试执行automatic logins,当您需要密码登录时,这不是您想要执行的操作。
检查the Perl/ssh documentation:

您可以尝试将identity_files设置为一个空数组,以查看是否强制其使用您提供的密码;或者您可以像上面的链接中那样设置公共(public)密钥身份验证。

10-06 01:20