gpg-agent-connect 도구를 사용하여 SSH 개인 키 파일을 다시 빌드하세요.

gpg-agent-connect 도구를 사용하여 SSH 개인 키 파일을 다시 빌드하세요.

~/.ssh/id_dsa비밀번호를 잊어버렸기 때문에 내 파일(DSA 알고리즘의 OpenSSH 개인 키 파일)에 액세스할 수 없습니다.

하지만 처음에는 이를 가져와서 gpg-agent내가 알고 있는 gpg-agent 암호로 보호했습니다. 지금도 개인 키는 여전히 잘 작동합니다 gpg-agent. 하지만 이제 gpg-agent.

이 도구를 사용하면 gpg-connect-agent다음과 같은 일련의 명령을 사용하여 개인 키(16진수/ascii 형식)를 추출할 수 있었던 것 같습니다. 하지만 원래 OpenSSH 개인 키 파일 형식으로 재구성하는 방법은 모르겠습니다.

  1. gpg-connect-agent옵션 부터 시작하세요 --hex.
  2. >프롬프트 에서 명령을 사용하여 키의 16진수 ID를 가져옵니다 keyinfo --ssh-list(정확하게 말하면 키의 16진수 ID를 제공하는 세 번째 필드입니다).
  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도구는 수십 줄의 16진수 및 ASCII 코드를 표시합니다. 이는 제가 원래 가져온 ssh 개인 키일 가능성이 높습니다.

OK그런 다음 작업이 성공했음을 나타내는 가 표시됩니다 .

표시되는 내용이 실제로 내 SSH 개인 키라고 가정하면("help import_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. 나는 내 문제를 해결하는 스크립트를 작성했는데, 이 스크립트는 16진수 편집 및 재암호화할 수 있는 보호되지 않은 S 표현식 키를 덤프합니다.

그래서 이 문제에 관해 Python 스크립트(https://gist.github.com/zougloub/3058d56857ba400b7ec3) gpg-agent를 사용하여 libassuan에서 이스케이프된 키랩 키를 검색하고 키를 암호화한 후 해독하여(libgcrypt 사용) 보호되지 않은 S-expression SSH 개인 키를 추출합니다. SSH 형식으로 데이터를 덤프하지 않기 때문에 귀하의 질문에 완전히 대답하지 않습니다.

데이터가 이제 최소한 구문 분석 가능한 상태이므로 이 단계를 한 단계 더 발전시킬 수 있기를 바랍니다.

추가 지침:

더 할 수 있을지 궁금하지만 여기저기 헤매느라 너무 많은 시간을 낭비했습니다... 제정신이라면 SSH 키를 다시 생성할 것입니다 :D

인사,

관련 정보