最近、コミットに署名するためのPGP鍵を作成しましたが、それは正しく機能しています。 gpgが私のO.S.とよりよく統合されていることも発見しました。 (Kubuntu)ssh-agentより。
私は怠惰で、アクセスしたすべてのさまざまなサーバーでSSHキーを置き換える必要がないようにしたいと思います。
既存のSSHキーをPGPキーのサブキーとしてインポートしてから、ssh-agentサポートを使用してgpgエージェントを実行し、ssh something
私のサブキーを使用し、gpgエージェントを使用してパスフレーズを要求しますか?
理想的には、メインのPGPキーに対してパスフレーズを1回だけ指定し、sshを介してコミットまたはログインするときは常に正しいキーを使用します。
出来ますか? (私はそれらが異なるフォーマットであることを知っていますが、それが本当に私が知っているすべてです)
簡単なアプローチが見つかりました。 monkeysphereプロジェクトのpem2openpgp
ユーティリティと、既存のキーをサブキーとしてインポートするgpg2
の機能が必要です。
最初にSSHキーをOpenPGP形式に変換します。 GPGの要求に応じて、新しいユーザーIDを指定する必要があります。
$ pem2openpgp $TEMP_USERID < .ssh/id_rsa | gpg2 --import
これで、SSH鍵をマスター鍵として持つ新しいユーザーIDができました。 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
必要なもの:
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/
に存在し、keygripを名前として使用します。これは、サブキーとして追加するために使用できます。
参考:
https://incenp.org/notes/2015/gnupg-for-ssh-authentication.html
https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html