Ответ 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.