ssh-add -l
дисплеи, что у меня есть 3 ключа RSA, добавленные к моему агенту SSH.
ssh-add -L
дисплеи те открытые ключи.
Как я получаю закрытые ключи также, так, чтобы я мог сохранить их в файл? Или это дизайном, что это невозможно? Как это работает затем?
Ssh-агент можно попросить сделать операции с помощью закрытого ключа? Как я могу попросить, чтобы это шифровало/дешифровало число для меня?
Все в порядке, что я должен написать код для этого (язык программирования не имеет значения), но я предпочел бы использовать существующий инструмент или библиотеку.
Невозможно получить закрытый ключ или выполнить шифрование, используя протокол между ssh и ssh-агентом, но можно получить закрытый ключ путем дампа памяти ssh-агента. В Linux вы должны быть root, чтобы сделать дамп памяти.
Я только что нашел очень хорошее объяснение того, как работает ssh-agent: http://www.unixwiz.net/techtips/ssh-agent-forwarding.html . Это частично отвечает на некоторые из моих вопросов.
Одним из наиболее умных аспектов работы агента является то, как он может проверять личность пользователя (или, точнее, владение закрытым ключом), не раскрывая этот закрытый ключ никому.
Одно из преимуществ агента в плане безопасности заключается в том, что закрытый ключ пользователя никогда не появляется на удаленных системах или в проводах, даже в зашифрованном виде.
Таким образом, протокол между SSH-клиентом и ssh-агентом не позволяет ни в SSH1, ни в SSH2 получить закрытые ключи от ssh-агента.
Однако, как root, вы можете получить дамп памяти ssh-агента и попытаться извлечь закрытый ключ оттуда. https://blog.netspi.com/stealing-unencrypted-ssh-agent-keys-from-memory делает именно это, и есть другие программы, упомянутые в разделе комментариев на этой странице. Однако, программы с этой страницы не сработали у меня на Debian buster: дамп памяти не содержал ключей, хотя ssh-add -l
отобразил RSA ключ.