JSch: Как подключиться к серверу через ssh-ключи - PullRequest
6 голосов
/ 05 октября 2011

Я хочу подключиться к серверу SSH из-за другого сервера SSH.Сервер шлюза требует имя пользователя / пароль, и я могу это сделать.Я использую туннель для входа на следующий сервер, но для этого требуется только ключ ssh.Я сгенерировал ключ через PuTTY, поэтому он существует для моего имени пользователя, но я не уверен, как получить его для моей Java-программы.Это конфигурация?то есть setConfig ("userauth.publickey", "com.jcraft.jsch.UserAuthPublicKey"), то как мне использовать это или что-то еще?Документация кажется скудной, и я ценю любую помощь.Все, что я пробовал, выдает ошибку: «Ошибка аутентификации» при подключении этого сеанса

Спасибо!

Используемый мной туннельный метод: http://sourceforge.net/apps/mediawiki/jsch/index.php?title=ProxySSH, поэтому благодаряпарень, который написал это!

Для контекста я хотел бы читать / писать на сервере в моей школе с моего телефона Android.

1 Ответ

10 голосов
/ 06 октября 2011

Чтобы включить аутентификацию с открытым ключом , необходимо использовать один из методов 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). Возможно, мне следует добавить эту информацию на вики-страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...