Убедитесь, что необходимые файлы существуют (id_rsa и id_rsa.pub на клиенте, author_keys на сервере).Убедитесь, что вы можете использовать аутентификацию с открытым ключом с другим инструментом, таким как ssh
, используя эти файлы.
Если все выглядит хорошо, проблема может быть в вашем провайдере безопасности Java.Читайте дальше, если считаете, что у вас есть нужные файлы.
Существуют различные форматы хранения закрытых ключей RSA, и SSH использует нестандартный формат.Большинство провайдеров ожидают что-то, называемое ключом CRT RSA, и когда JSch не дает им ключ в этом формате, они вызывают исключение, которое JSch молча ест и переходит к следующему методу аутентификации.
Каков вашпровайдер?Следующий фрагмент поможет вам выяснить:
import java.security.KeyFactory;
…
KeyFactory f = KeyFactory.getInstance("RSA");
System.out.println(f.getProvider().getName());
Обновление: я провел некоторые проверки, и начиная с Java 5 поставщик SunPKCS11 установлен с самым высоким приоритетом в системах Solaris, для повышения производительности.,Поскольку я не запускаю Solaris, я не могу его протестировать, но я полагаю, что это может быть причиной проблемы.
JSch не позволяет вам указать поставщика, который будет использовать эту операцию через его API,так что вам придется изменить приоритет установленных провайдеров.На самом деле, я бы посоветовал попытаться удалить SunPKCS11 из этого приложения;запустите этот код один раз при запуске приложения:
Security.removeProvider("SunPKCS11-Solaris");