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

関連情報