perl - 为什么 ssh 在我将密码提供给 Perl 的 Net::SSH::Perl 后提示我输入密码?

标签 perl ssh

我正在使用 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:WAITING服务器公钥。
serv1:收到服务器公钥(768 位)和主机 key (1024 位)。
serv1:主机 '15.154.59.63' 是已知的并且与主机 key 匹配。
serv1:加密类型:DES3
serv1:发送加密 session key 。
serv1:收到加密确认。
serv1:进行质询响应认证。
密码:

有人可以启发我吗?

最佳答案

您的错误中的这一行:

serv1: RSA authentication failed: Can't load public key.


告诉我你的程序正在尝试做automatic logins ,当您需要密码才能登录时,这不是您想要做的。
查看the Perl/ssh documentation :

identity_files

A list of RSA/DSA identity files to be used in RSA/DSA authentication. The value of this argument should be a reference to an array of strings, each string identifying the location of an identity file. Each identity file will be tested against the server until the client finds one that authenticates successfully.

If you don't provide this, RSA authentication defaults to using $ENV{HOME}/.ssh/identity, and DSA authentication defaults to $ENV{HOME}/.ssh/id_dsa.


您可以尝试设置 identity_files到一个空数组,看看是否会强制它使用您提供的密码;或者您可以继续设置公钥身份验证,如上面的链接。

关于perl - 为什么 ssh 在我将密码提供给 Perl 的 Net::SSH::Perl 后提示我输入密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1356888/

相关文章:

perl - 两种形式的 Perl 文件名通配符命令之间的区别

mysql - 如何将数据写入文件以加载到MySQL数据库中?

linux - 如何找出我在 go 老爹共享主机 ssh 上使用的发行版

mysql - 如何关闭这个 ssh 隧道?

xml - 查找 XML 结构化文档中的节级别 - perl

arrays - 在 Perl 中返回最后一个非零元素的索引的优雅方法?

bash - 如何用空格分隔 "sentence"中的单词?

linux - 代理设置问题

ubuntu - pam_unix.so 在成功登录时打印 "authentication failure"

ruby - 从 Vagrant 启动时,Passenger 停留在前台