Net::SFTP аутентификация perl rsa
Я пытался sftp с пакетом Net::SFTP и ключом RSA. Я могу вручную ввести sftp без пароля на свой сервер sftp, но при использовании пакета он не работает. У меня заканчиваются идеи.
my $ftp = Net::SFTP->new($HOST, user => $USER, ssh_args => { identity_files => [ "/Users/user/.ssh/id_rsa" ] }, debug => 3 );
Это дает мне следующую ошибку:
Попытка аутентификации pubkey с помощью ключевого файла '/Users/tom/.ssh/id_rsa'
FATAL: сбой импорта rsa: неверный входной пакет. в /Library/Perl/5.18//Crypt/PK/RSA.pm строка 123.
Любая помощь будет высоко ценится, спасибо!
1 ответ
Я просто столкнулся с этим сам.
Проблема в том, что мои (и ваши) личные ключи зашифрованы, как вы отметили в своем комментарии. Зашифрованный закрытый ключ требует, чтобы вы вводили пароль, прежде чем его можно будет использовать, и кажется, что модуль perl не поддерживает это.
Вы утверждали, что вам не нужен пароль при использовании этого ключа, но, возможно, это произошло из-за того, что sftp использовал ваш агент ssh? т.е. где вы вводите пароль один раз, а затем ключ остается в памяти для использования всеми инструментами семейства ssh? Может показаться, что модуль perl также не поддерживает агента, но решение @salva использовать Net:: SFTP:: Foreign должно решить эту проблему.
Стоит отметить, что я получил это исключение при запуске кода, который раньше работал нормально на моей рабочей станции, но при новой установке perl. Я думаю, что произошло то, что модуль Net::SSH::Perl добавил поддержку для чтения закрытых ключей или изменил сбой при чтении закрытого ключа в фатальную ошибку, а не просто игнорировал ключ. Мой код все равно не использовал ключ, но теперь не будет работать с этим зашифрованным ключом. Это исправлено с помощью:
my $sftp= Net::SFTP->new(
...
ssh_args => [ identity_files => [] ]
);
и, конечно, вы можете добавить список определенных (незашифрованных) идентификационных файлов, которые вы хотите использовать вместо идентификатора RSA пользователя по умолчанию.
Если код нелегко редактировать, вы также можете избежать этой проблемы, установив переменную среды $HOME
к чему-то, в чем нет ключа.