Как извлечь секретные ключи из ssh-agent?

ssh-add -l показывает, что к моему агенту SSH добавлено 3 ключа RSA.

ssh-add -l отображает эти открытые ключи.

Как мне также получить закрытые ключи, чтобы я мог сохранить их в файл? Или это так, что это невозможно, т.е. Ssh-agent может быть запрошен для выполнения операций с использованием закрытого ключа, но он никогда не вернет сам ключ? Если это так, то как я могу попросить его зашифровать/расшифровать номер для меня?

Это нормально, что я должен написать код для этого (язык программирования не имеет значения), но я бы предпочел использовать существующий инструмент или библиотеку.

Ответ 1

Получить закрытый ключ или выполнить шифрование по протоколу между ssh и ssh-agent невозможно, но получить закрытый ключ можно, выгрузив память ssh-agent. В Linux вы должны быть пользователем root, чтобы сделать дамп памяти.

Я только что нашел очень хорошее объяснение о том, как работает ssh-agent: http://www.unixwiz.net/techtips/ssh-agent-forwarding.html. Это частично отвечает на некоторые мои вопросы.

  • Один из более умных аспектов агента - это то, как он может проверить личность пользователя (или, точнее, владение личным ключом), не раскрывая этот личный ключ никому.

  • Одним из преимуществ безопасности переадресации агентов является то, что закрытый ключ пользователя никогда не появляется в удаленных системах или в сети, даже в зашифрованном виде.

Таким образом, протокол между SSH-клиентом и ssh-agent не предоставляет SSH1 или SSH2 никакой возможности получить закрытые ключи от ssh-agent.

Однако в качестве пользователя root вы можете получить дамп памяти ssh-agent и попытаться извлечь секретный ключ оттуда. https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory делает именно это, и есть другие части программного обеспечения, упомянутые в разделе комментариев этой страницы. Однако программное обеспечение на этой странице у меня не работало на Debian Buster: дамп памяти не содержал никаких ключей, хотя ssh-add -l отображал ключ RSA.

Ответ 2

В моем случае я случайно удалил папку .ssh, но мои ключи загружены. Но так как я не могу восстановить те из ssh-add, поэтому мне пришлось использовать программное обеспечение для восстановления файлов.

Ответ 3

Вам, вероятно, не нужно. Скорее всего, вы просто хотите открытый ключ:

ssh-add -L > ~/.ssh/id_rsa.pub

Ответ 4

Это скорее вопрос sysadmin, а просто посмотрите в ~/.ssh/id_rsa или id_dsa для закрытых ключей. Сначала им нужно было попасть в ssh-agent...