私はNet::SSH2を使用する単純な perl テスト スクリプトを持っていますが、公開鍵認証で動作させるのに問題があります。
注:いくつかの返信を読んだ後、Net::SSH2 を使用する別のアプリケーションで発生していた問題を絞り込むためにスクリプトを作成したことを言及する必要があることに気付きました。したがって、 Net::OpenSSHやNet::OpenSSH::Compat::SSH2などの代替パッケージに切り替えることはできません。
注更新: salvaが指摘したように、Net::OpenSSH::Compat::SSH2は 、元のアプリケーションにパッチを適用することなく使用できます。
コードは次のとおりです。
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
Ubuntuで使用してキーペアを生成しています:
ssh-keygen -t rsa
ssh-copy-id user@server
ssh user@server
上記は正しく機能します-サーバーに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
に正しくインストールするのですか?ソースからのビルドが Ubuntu パッケージを上書きまたは上書きしていると思います。Net::SSH2
libssh2-1-dev
アップデート
Daniel Stenberg の返信で指摘されているように、Ubuntu 10.04 パッケージは現在、少し古くなっています (最新の安定ビルド 1.2.8 と比較すると、バージョン 1.2.2)。Ubuntu パッケージのソース「over the top」から libssh2 をインストールすると、問題が解決します。しかし、これは私には面倒に感じます。Ubuntu パッケージを削除し、ソースから libssh2 をインストールして、Net::SSH2 をビルドするにはどうすればよいですか? Net::SSH2 に libssh2 開発ヘッダーの場所を伝えるにはどうすればよいですか?
更新 2
salva が再び助けに来て、Net::SSH2インストーラーlib
をinclude
ディレクトリで構成して、libssh2 のソース インストールで使用できるようにする方法を示しました。ありがとうサルバ!にパッチを適用する代わりに、 と の上部にある変数をオーバーライドするだけでよいことに注意してMakefile.PL
ください。サルバのパッチを見るまで、私はこれに気づきませんでした。$lib
$inc
Makefile.PL