У меня есть простой тестовый сценарий Perl, который использует Net :: SSH2 , и у меня возникают проблемы при его работе с аутентификацией с открытым ключом.
Примечание: Прочитав пару ответов, я понимаю, что должен упомянуть, что создал сценарий, чтобы помочь устранить проблему, возникшую у меня с другим приложением, использующим Net :: SSH2.Поэтому я не могу переключиться на альтернативный пакет, такой как Net :: OpenSSH или Net :: OpenSSH :: Compat :: SSH2 .
Примечание Обновление: Как Сальва указал , 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
из исходного кода, это сработает.
Означает ли это, что сборка libssh2-1-dev в Ubuntu 10.04 является ошибочной?Если это так, как мне установить libssh2
из источника и правильно установить Net::SSH2
, не требуя libssh2-1-dev
.Я предполагаю, что сборка из исходного кода перезаписывает или переопределяет пакет Ubuntu.
ОБНОВЛЕНИЕ
Как отмечено в Ответ Даниэля Стенберга , Ubuntu 10.04пакет сейчас немного устарел (версия 1.2.2, по сравнению с последней стабильной сборкой 1.2.8).Установка libssh2 из исходного кода «поверх» пакета Ubuntu решает проблему.Тем не менее, это мне кажется грязным.Как я могу удалить пакет Ubuntu, установить libssh2 из исходного кода и по-прежнему собирать Net :: SSH2 - как мне сказать Net :: SSH2, где найти заголовки разработки libssh2?
ОБНОВЛЕНИЕ 2
salva снова пришли на помощь и показали, как установщик Net :: SSH2 может быть настроен с lib
и *Каталоги 1080 *, так что они могут использоваться с исходной установкой libssh2.Спасибо, Сальва!Обратите внимание, что вместо исправления Makefile.PL
можно просто переопределить переменные $lib
и $inc
в верхней части Makefile.PL
.Я не знал об этом, пока не посмотрел на патч сальвы.