Каковы ключевые форматы файлов JSch и SharpSSH?

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

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

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


person Patrick    schedule 13.11.2011    source источник


Ответы (1)


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

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

К сожалению, официальной документации для JSch почти не существует, но я написал для него несколько Javadocs. (Хотя кажется, что не упоминается формат файла ключа... Придется это исправить.) Также есть Руководство в JSch Wiki, содержащее страницу об аутентификации с открытым ключом. (в котором также еще не упоминается формат ключа :-/).

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

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

На самом деле это правильно только для ключей 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, включая удаление хостов, соответствующих имени хоста, и преобразование всех имен хостов в их хешированные представления.

person Paŭlo Ebermann    schedule 13.11.2011
comment
Спасибо. Вы можете считать форматы задокументированными; формат файла ключа google jsch, и этот вопрос занимает четвертое место :) - person Patrick; 14.11.2011