Каковы основные форматы файлов JSch и sharpSSH? - PullRequest
5 голосов
/ 14 ноября 2011

Я смотрю на настройку аутентификации клиента и сервера с открытым ключом для SFTP с использованием библиотеки JSch (или фактически ее порта sharpSSH C #). К сожалению, я не могу найти никакой документации для форматов файлов, используемых функциями загрузки ключей:

jsch.addIdentity(filename, passphrase);
jsch.setKnownHosts(filename);

Какой формат файла используется закрытым ключом и известными файлами хостов?

1 Ответ

9 голосов
/ 14 ноября 2011

JSch использует OpenSSH файл ключа формат (как для открытых, так и для закрытых ключей). Я не нашел спецификации этого формата, но вы можете использовать инструмент OpenSSH ssh-keygen для преобразования ключей из / в другие форматы (и Google покажет другие инструменты для преобразования из / в еще большее количество форматов). ).

Обновление: После запроса в списке рассылки OpenSSH и чтения некоторых RFC похоже, что файл открытого ключа OpenSSH содержит (для ключей версии 2) открытый ключ, как указано в RFC 4253 (раздел 6.6) , только с оберткой по base64 (и типом ключа в качестве префикса, и полем комментария в качестве постфикса). Я до сих пор не нашел спецификации для файла закрытого ключа.

К сожалению, официальной документации для JSch практически не существует, но я написал для нее Javadocs . (Хотя, похоже, не упоминается формат файла ключа ... Я должен это исправить.) В JSch Wiki есть также Manual , содержащий страницу о аутентификации с открытым ключом (в которой также пока не указан формат ключа: - /).

Файл известных хостов *1022* также имеет тот же формат, что и соответствующий файл клиента OpenSSH. Его формат объяснен на странице руководства OpenSSH sshd , раздел SSH ИЗВЕСТНЫЙ ФОРМАТ ФАЙЛА ХОСТОВ :

Каждая строка в этих файлах содержит следующие поля: маркеры (необязательно), имена хостов, биты, экспонента, модуль, комментарий. Поля разделенные пробелами.

На самом деле это верно только для ключей SSH 1 RSA. Для ключей SSH 2 у вас есть идентификатор типа (ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-dss или ssh-rsa), а затем ключ в кодированной форме base-64. (См. Немного в той же странице руководства, для файла авторизованных ключей). (Я думаю, что JSch поддерживает только форматы ключей DSA и RSA, но не ECDSA.)

Обратите внимание, что строки в этих файлах обычно состоят из сотен символов долго, и вы определенно не хотите вводить ключи хоста вручную. Скорее, сгенерируйте их с помощью скрипта, ssh-keyscan (1) или взяв /etc/ssh/ssh_host_key.pub и добавление имен хостов впереди. ssh-keygen (1) также предлагает базовое автоматическое редактирование для ~ / .ssh / known_hosts, включая удаление хостов, соответствующих имени хоста, и преобразование всех имен хостов в их хешированные представления.

...