С помощью инструмента gpg-agent-connect восстановите файл закрытого ключа ssh

8

Я потерял доступ к своему ~/.ssh/id_dsaфайлу (файл закрытого ключа OpenSSH в алгоритме DSA) из-за того, что забыл пароль.

Но изначально я импортировал его gpg-agentи защитил парольной фразой gpg-agent, которую я знаю. И закрытый ключ все еще работает нормально gpg-agentдаже сейчас, хотя теперь я хочу восстановить файл закрытого ключа OpenSSH, используя то, что хранится в gpg-agent.

Используя gpg-connect-agentинструмент со следующей последовательностью команд, я думаю, что могу извлечь закрытый ключ (в формате hex / ascii), хотя я не знаю, как восстановить его в исходный формат файла закрытого ключа OpenSSH:

  1. Начните gpg-connect-agentс --hexварианта.
  2. В командной >строке получите шестнадцатеричный идентификатор ключа, используя keyinfo --ssh-listкоманду (если быть точным, это третье поле, которое дает шестнадцатеричный идентификатор ключа).
  3. В >командной строке выполните keywrap_key --export.
  4. В >командной строке выполните export_key <enter hex ID from step 2>или export_key --openpgp <enter hex ID from step 2>.

Теперь, после запроса пароля, его получения и подтверждения, gpg-connect-agentинструмент отображает несколько десятков строк шестнадцатеричных и шестнадцатеричных кодов, которые, как я подозреваю, является моим оригинальным импортированным закрытым ключом ssh.

Затем он отображает OK, безусловно, подразумевая, что операция прошла успешно.

Если предположить, что это действительно мой закрытый ключ ssh (согласно «help export_key», то, что было выведено на экран, является зашифрованной версией ключа aeswrap-128; скорее всего, зашифровано с помощью моей известной парольной фразы gpg-agent), некоторая помощь в том, как было бы очень полезно преобразовать эту информацию в традиционный формат закрытого ключа ssh (для этого была бы полезна программа на perl / python / shell / C)!

Хари
источник

Ответы:

1

Надеюсь помочь, но я немного не в теме, потому что наткнулся на этот вопрос, имея не связанную с этим проблему. Во время обновления gpg 2.1.6-> 2.1.10 я столкнулся с проблемой парсинга закрытого ключа Ed25519: https://bugs.gnupg.org/gnupg/issue2096 . Сценарий, который я написал, устраняет мой собственный зуд, он может сбросить незащищенный ключ S-выражения, который я смог зашифровать и повторно зашифровать.

Итак, что касается этого вопроса, я написал скрипт на Python ( https://gist.github.com/zougloub/3058d56857ba400b7ec3 ), который использует gpg-agent для извлечения незащищенного закрытого ключа SSH-выражения S-выражения путем извлечения ключа-ключа, освобожденного от libassuan-escaped. , зашифрованный ключ и расшифровка его (с помощью libgcrypt). Он не полностью отвечает на ваш вопрос, так как не выводит данные в формате SSH.

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

Дальнейшие указатели:

Мне было любопытно посмотреть, смогу ли я сделать лишнюю милю, но я уже потерял слишком много времени, гуляющего вокруг ... кто-то в здравом уме просто восстановил бы ключ SSH: D

С Уважением,

cJ Зуглуб
источник