私は最近コミットに署名するために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
簡単な方法を見つけました。pem2openpgp
Monkeysphereプロジェクトのユーティリティとgpg2
既存のキーをサブキーにインポートする機能が必要です。
まず、SSHキーをOpenPGP形式に変換します。 GPGが要求するように新しいユーザーIDを提供する必要があります。
$ pem2openpgp $TEMP_USERID < .ssh/id_rsa | gpg2 --import
これで、新しいユーザーIDとSSHキーがマスターキーとして使用されます。 (私はにgpg2 -K
設定しました)を使用して確認できます。また、新しくインポートしたキーのキーグリップを確認してください。TEMP_USERID
TEST
$ 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