我正在使用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)密钥身份验证。