SSH 인증을 위해 내 SSH 키를 GPG 하위 키로 가져오기

SSH 인증을 위해 내 SSH 키를 GPG 하위 키로 가져오기

최근에 커밋에 서명하기 위해 PGP 키를 만들었고 제대로 작동합니다. 또한 gpg는 ssh-agent보다 내 운영 체제(Kubuntu)와 더 잘 통합된다는 것을 알았습니다.

나는 게으르고 내가 액세스할 수 있는 모든 다른 서버에서 SSH 키를 교체하는 것을 피하고 싶습니다.

ssh something기존 SSH 키를 PGP 키의 하위 키로 가져온 다음 ssh-agent 지원으로 gpg 에이전트를 실행하여 런타임에 내 하위 키를 사용하고 gpg 에이전트를 사용하여 비밀번호를 묻는 옵션이 있습니까 ?

이상적으로는 마스터 PGP 키에 암호를 한 번만 제공한 다음 ssh를 통해 커밋하거나 로그인할 때마다 올바른 암호를 사용하는 것입니다.

가능합니까? (다른 형식이라는 것을 알고 있지만 그게 내가 아는 전부입니다.)

답변1

너가 필요한 모든것:

export GPG_TTY=$(tty)
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
ssh-add -c -t 3600 ~/.ssh/id_rsa   # set the cache lifetime as 3600s

그런 다음 자유롭게 파일을 삭제하세요. mv ~/.ssh/id_rsa.* /path/to/backup.

이제 SSH를 통해 테스트할 수 있습니다.

결국 프로필에 .profile또는 와 같은 환경을 추가하는 것을 잊지 마세요 ~/.bashrc.


(PS: SSH 키(gpg 형식)가 키그립에 존재하고 이름이 키그립인 것을 확인할 수 있습니다 ~/.gnupg/private-keys-v1.d/. 이를 하위 키로 추가할 수 있습니다.

인용하다:

https://incenp.org/notes/2015/gnupg-for-ssh-authentication.html

https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html

답변2

간단한 방법을 찾았습니다. pem2openpgpMonkeysphere 프로젝트의 유틸리티와 gpg2기존 키를 하위 키로 가져오는 기능이 필요합니다 .

먼저 SSH 키를 OpenPGP 형식으로 변환합니다. GPG에서 요구하는 대로 새 사용자 ID를 제공해야 합니다.

$ pem2openpgp $TEMP_USERID < .ssh/id_rsa | gpg2 --import

이제 새 사용자 ID와 SSH 키가 마스터 키로 사용됩니다. (저는 으로 gpg2 -K설정했습니다 ) 를 사용하여 확인할 수 있습니다 . 또한 새로 가져온 키의 키그립을 확인하세요.TEMP_USERIDTEST

$ gpg2 -K --with-keygrip $TEMP_USERID
sec   rsa4096 2018-03-02 [C]
      21C766CAC691F395D640E8207E9F9F883D1E49D8
      Keygrip = AAB27E63622E87B27AC34293EDF52C3AB016CA2E
uid           [ unknown] TEST

이제 gpg2 --expert --edit-key마스터 키를 사용하고 위의 키를 하위 키로 가져옵니다.

$ gpg2 --expert --edit-key $YOURUSERID
gpg> addkey
......
(13) Existing key
Enter the keygrip: AAB27E63622E87B27AC34293EDF52C3AB016CA2E
......

gpg2평소처럼 질문을 많이 할게요. 올바른 키 기능을 전환하는 것을 잊지 마십시오(서명: 꺼짐, 암호화: 꺼짐, 확인: 켜짐).

그런 다음 가져온 SSH 키를 마스터 키의 하위 키로 사용해야 합니다. 확인하다:

$ gpg2 -K $YOURUSERID --with-keygrip
sec   rsa4096 2016-02-02 [SC]
......
uid           [ 绝对 ] CUI Hao (cvhc) <[email protected]>
......
ssb   rsa4096 2018-02-21 [A]
      Keygrip = AAB27E63622E87B27AC34293EDF52C3AB016CA2E

이를 사용하여 gpg2 --export-ssh-key가져온 하위 키가 실제로 원래 SSH 키와 동일한지 확인할 수 있습니다.

키 가져오기에 사용된 임시 사용자 ID는 여전히 키링에 있습니다. 수동으로 삭제해야 합니다. GnuPG는 해당 개인 키를 삭제하지 않고 공개 키/사용자 ID를 삭제하는 것을 방지합니다. 그러나 임시 사용자와 가져온 하위 항목은 동일한 개인 키를 공유하므로 gpg2 --delete-secret-keys $TEMP_USERID가져온 하위 항목도 삭제됩니다.

내 해결책은 개인 키를 백업 ~/.gnupg/private-keys-v1.d하고 가져온 하위 키를 삭제한 후 다시 옮기는 것이었습니다 gpg2.

개인 키에 영향을 주지 않고 공개 키를 삭제할 수 있는 옵션을 제공하도록 GnuPG에 요청하는 기능 요청을 제출했습니다.https://dev.gnupg.org/T3808

관련 정보