web-dev-qa-db-ja.com

SSH認証に使用するGPGサブキーとしてSSHキーをインポートする

最近、コミットに署名するためのPGP鍵を作成しましたが、それは正しく機能しています。 gpgが私のO.S.とよりよく統合されていることも発見しました。 (Kubuntu)ssh-agentより。

私は怠惰で、アクセスしたすべてのさまざまなサーバーでSSHキーを置き換える必要がないようにしたいと思います。

既存のSSHキーをPGPキーのサブキーとしてインポートしてから、ssh-agentサポートを使用してgpgエージェントを実行し、ssh something私のサブキーを使用し、gpgエージェントを使用してパスフレーズを要求しますか?

理想的には、メインのPGPキーに対してパスフレーズを1回だけ指定し、sshを介してコミットまたはログインするときは常に正しいキーを使用します。

出来ますか? (私はそれらが異なるフォーマットであることを知っていますが、それが本当に私が知っているすべてです)

6
Fire-Dragon-DoL

簡単なアプローチが見つかりました。 monkeysphereプロジェクトのpem2openpgpユーティリティと、既存のキーをサブキーとしてインポートするgpg2の機能が必要です。

最初にSSHキーをOpenPGP形式に変換します。 GPGの要求に応じて、新しいユーザーIDを指定する必要があります。

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

これで、SSH鍵をマスター鍵として持つ新しいユーザーIDができました。 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

4
cuihao

必要なもの:

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

4
King's Way