Есть ли способ генерировать открытый ключ SSH из частного с помощью Python?

... или, если нет, можете ли вы предоставить мне ссылку или номер RFC для полного алгоритма (от получения файла / строки закрытого ключа в кодировке ASCII до генерации файла / строки открытого ключа в кодировке ASCII).

Чтобы показать вам большую картину - я начал использовать библиотеку pylibssh2. В этой библиотеке есть метод userauth_publickey_fromfile (он вызывает NotImplementedException, но когда вы принудительно запускаете связывание python - он работает). Проблема в том, что этот метод хочет закрытый ключ (хороший) и открытый ключ (черт знает почему). Конечно, я могу передать оба эти ключа в качестве аргументов своим функциям, но я думаю, что это не нужно, и я не хочу ожидать еще одну переменную только для этого. Поэтому я хочу сгенерировать открытый ключ из личного.

Может быть, я что-то упускаю в pylibssh2 или даже в самой libssh2 (я также могу написать привязки для этого)?

Спасибо за любую помощь!

3 ответа

Вам нужен ответ, чтобы быть строго питоном? Вы можете сделать это с ssh-keygen -y -f privatekey

import commands
cmd = "ssh-keygen -y -f %s" % (file)
return commands.getstatusoutput(cmd)[1]

Я не знаю как ты получаешь userauth_publickey_fromfile() работает, но, согласно http://github.com/wallix/pylibssh2/blob/master/libssh2/session.py, этот метод ожидает пути к файлам ключей, а не сами ключи.

Если закрытый ключ принадлежит вам, то и открытый, и закрытый ключи должны находиться в вашем каталоге ~ /.ssh.

Закрытые и открытые ключи можно создавать только парами. Если бы вам удалось вывести одно из них из другого, криптографическая вселенная взорвалась бы.

Открытый ключ должен быть доступен для другой стороны соединения SSH. Поэтому этот метод ожидает его в дополнение к закрытому ключу.

Другие вопросы по тегам