Чтобы включить аутентификацию с открытым ключом , необходимо использовать один из методов JSch.addIdentity
.
Они принимают открытый и закрытый ключи в формате ключей OpenSSH - поэтому убедитесь, что вы экспортируете их из PuTTY в этом формате. (JSch не понимает собственный формат PuTTY, хотя вы могли бы написать адаптер, реализующий интерфейс Identity, анализируя его самостоятельно).
Идентификаторы, добавленные в JSch, являются глобальными, а не сеансными. Обычно это не проблема, так как JSch будет пытаться использовать все методы аутентификации, которые поддерживаются по порядку и самим сервером, и аутентификацией с открытым ключом, как правило, перед аутентификацией по паролю.
Для всех методов аутентификации требуется имя пользователя (обычно это имя учетной записи, в которую необходимо войти).
При аутентификации с открытым ключом открытый ключ должен быть каким-то образом ранее доступен для сервера. Для sshd OpenSSH открытый ключ должен быть указан в ~/.ssh/authorized_keys
. (Если у вас есть только один открытый ключ, просто скопируйте его в этот файл, если у вас есть несколько (каждый из которых будет разрешен), каждый должен быть в одной строке.)
Так что он должен работать "из коробки" после установки идентификатора.
Если вы хотите убедиться, что в первом сеансе используется аутентификация по паролю, а во втором (туннельном) используется открытый ключ, вы можете использовать конфигурацию для сеанса, переопределяя глобальную:
tunnelSession.setConfig("PreferredAuthentications", "password");
innerSession.setConfig("PreferredAuthentications", "publickey");
(Это списки, разделенные запятыми, здесь по одному элементу в каждом.)
О примере ProxySSH, который я написал (с некоторой помощью автора JSch, Atsuhiko Yamanaka). Возможно, мне следует добавить эту информацию на вики-страницу.