我有一個簡單的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