我有一个简单的perl测试脚本,它使用Net::SSH2,并且我无法使其使用公钥验证。Net :: SSH2的密钥
注意:在阅读了几篇回复之后,我意识到我应该提到我创建了脚本来帮助缩小与使用Net :: SSH2的另一个应用程序时遇到的问题。因此,我不可能切换到替代包,如Net::OpenSSH或Net::OpenSSH::Compat::SSH2。
注意更新:作为salvapointed out,Net::OpenSSH::Compat::SSH2可以不必修补原来的应用程序中使用。
下面的代码:Ubuntu上使用ssh-keygen
use strict;
use warnings;
use 5.10.0;
use Net::SSH2;
my $ssh2 = Net::SSH2->new();
my $auth;
if ($ssh2->connect('hostname')) {
$auth = $ssh2->auth_publickey(
'username',
'/home/mike/.ssh/id_rsa.pub',
'/home/mike/.ssh/id_rsa',
'password'
);
}
if ($auth && $ssh2->auth_ok) {
say 'Success';
} else {
say join ', ', $ssh2->error;
}
我已经生成密钥对:
ssh-keygen -t rsa
ssh-copy-id [email protected]
ssh [email protected]
上述工作正常 - 我可以ssh到服务器。
当我运行Perl代码,我使用密码保护的密钥时,出现以下错误:
-16, LIBSSH2_ERROR_FILE, Unable to initialize private key from file
如果我尝试用非密码保护的密钥,它工作正常。
我已经安装了下列库:
Net::SSH2 0.35
libssh2-1 1.2.2-1
libssh2-1-dev 1.2.2-1
ssh 1:5.3p1-3ubuntu6
openssh-server 1:5.3p1-3ubuntu6
openssh-client 1:5.3p1-3ubuntu6
openssl 0.9.8k-7ubuntu8.6
libssl-dev 0.9.8k-7ubuntu8.6
情节变得
如果我删除libssh2-1
和libssh2-1-dev
,我得到一个错误,如预期:
Can't load '/usr/local/lib/perl/5.10.1/auto/Net/SSH2/SSH2.so'
如果然后我从源代码构建libssh2
,我无法重新安装Net::SSH2
,因为它无法找到开发标题。但是,如果我重新安装libssh2-1
和libssh2-1-dev
,然后从源代码构建并安装libssh2
,它就会起作用。
这是否意味着Ubuntu 10.04上的libssh2-1-dev的构建有问题?如果是这样,我如何从源代码安装libssh2
并正确安装Net::SSH2
,而不需要libssh2-1-dev
。我认为从源代码构建覆盖或覆盖Ubuntu软件包。
UPDATE
正如Daniel Stenberg's reply指出,Ubuntu的10.04包现在已经过时了一点(1.2.2版本,与1.2.8最新的稳定版本相比)。在Ubuntu软件包的顶部安装libssh2解决了这个问题。但是,这对我来说很混乱。我如何删除Ubuntu软件包,从源代码安装libssh2,并仍然构建Net :: SSH2 —如何告诉Net :: SSH2在哪里可以找到libssh2开发头文件?
UPDATE 2
salvacame to the rescue again,并显示如何Net::SSH2安装者可以用lib
和include
目录被配置,使得它可以与源被用于安装libssh2的。谢谢salva!请注意,代替修补Makefile.PL
,可以仅覆盖Makefile.PL
顶部的$lib
和$inc
变量。直到我看到salva的补丁时,我才意识到这一点。
感谢您的答复。我的测试脚本是帮助缩小与使用Net :: SSH2的另一个应用程序的问题,所以不幸的是,我坚持使用它。该应用程序是开源的,所以我最终可能会提交一个允许使用其中一种替代方案的修补程序。同时,我通过从源代码安装来实现它,但是我想解决安装了Ubuntu软件包和源代码包的混乱情况。 – Mike 2011-05-27 07:00:17
感谢您的更新 - 这非常酷。我已经在我的测试脚本上尝试过了,它完美地工作。它应该很简单,可以在适当的应用程序中覆盖Net :: SSH2。更重要的是,这是一个非常简单的补丁,可以添加到未来的版本中 - 如果可用,应用程序可以使用Net :: OpenSSH :: Compat :: SSH2,如果不可用,可以回退到Net :: SSH2。谢谢。 – Mike 2011-05-27 08:43:39
Net :: OpenSSH :: Compat :: SSH2还不是一个成熟的模块。不要犹豫,以报告任何错误或问题,你可能会发现。 – salva 2011-05-27 09:50:35