web-dev-qa-db-ja.com

JPGキーとSSHキーは交換可能ですか?

RSAGPGキーを生成し、SSHログインで使用したい。これは可能ですか?もしそうなら、どうですか?

編集:@wwernerの回答を参照してください、私は試していませんが、それは現在の解決策のようです(2018年現在)

75
destan

私はこれが古い記事であることを知っていますが、私のような人々にとってこれにつまずきます:

(gpg 2.1以降)gpgを使用して直接sshキーを抽出することが可能になりました:gpg --export-ssh-key <key id>!

!マークはオプションです。これにより、主キーがエクスポート可能になり、キーが認証可能かどうか([CA])かどうかのチェックが省略されます。

詳細:

30
wwerner

私はこのトピックについていくつかの調査を行っており、いくつかヒントを与えることができますが、それを機能させる方法はまだ見つかりません。

モンキースフィア

Monkeysphere は非常に興味深いプロジェクトのようですが、MacPortsを使用して空き容量を少しでも詰まらせずにMac OS Xでコンパイルすることはできませんでした。

Gpgkey2sshの使用

最初に試すことをお勧めする方法は、キーID(例:BFB2E5E3)から互換性のあるauthorized_keysエントリを生成することです。

gpgkey2ssh BFB2E5E3 | tee -a ~/.ssh/authorized_keys

ここでは、テストのためにsshサーバーを実行したため、これをローカルホストに追加しましたが、もちろん、これをターゲットホスト~/.ssh/authorized_keysに追加する必要があります。次に、認証時にこのキーの秘密部分を使用するようにSSHに指示する必要がありますが、ASCIIのアーマーバージョンのキーペアをエクスポートするだけでは機能しません。

gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa
gpg --armor --export BFB2E5E3! | tee ~/.ssh/id_rsa.pub
chmod 400 ~/.ssh/id_rsa
ssh localhost

Gpg-agentの使用

gpg-agentには、よく知られている--enable-ssh-supportのドロップイン置換として使用できるssh-agentオプションがあります。次のようにssh-addを起動した後、gpg-agentを介してGPGキーを追加しようとしている人を読んだことがあります。

gpg-agent --enable-ssh-support --daemon
gpg --armor --export-secret-key BFB2E5E3! | tee ~/.gnupg/exported-keys/BFB2E5E3_sec.asc
ssh-add ~/.gnupg/exported-keys/BFB2E5E3_sec.asc

しかし、これがうまくいくとは思いません。 gpg-agent manpage はこう言っています:

エージェントを介して使用されるSSHキーは、最初にssh-addユーティリティを介してgpg-agentに追加する必要があります。キーが追加されると、ssh-addは提供されたキーファイルのパスワードを要求し、保護されていないキーマテリアルをエージェントに送信します。これにより、gpg-agentはパスフレーズを要求します。これは、新しく受信したキーを暗号化してgpg-agent固有のディレクトリに保存するために使用されます。

したがって、gpg-agentは、GPG暗号化でSSHキーを保護するための追加の手段として使用する必要があるようです。

GPGキーをOpenSSHに変換する

JérômePouillerは彼の blog で、Gpgsmユーティリティがキーと証明書をPCSC12にエクスポートできると書いています。その後、OpenSSHで使用できます。

gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0xXXXXXXXX
openssl pkcs12 -in secret-gpg-key.p12 -nocerts -out gpg-key.pem
chmod 600 gpg-key.pem
cp gpg-key.pem ~/.ssh/id_rsa
ssh-keygen -y -f gpg-key.pem > ~/.ssh/id_rsa.pub

しかし、私はgpgsmが私のgpgキーペアを受け入れるようにする方法を見つけていません。

あなたが試すことができる他のこと

SSHには-Iオプションがあり、PKCS#11共有ライブラリを指定します。sshは、ユーザーのプライベートRSAキーを提供するPKCS#11トークンとの通信に使用する必要があります。 ssh-keygenは、RFC4716/SSH2公開鍵または秘密鍵、PEM PKCS8公開鍵、およびPEM公開鍵を使用して、-iおよび-mオプションを使用するOpenSSH互換の秘密(または公開)鍵を生成できます。

それでも、すべてをまとめる方法が見つかりません。

31

いいえ、互換性はありません。はい、認証にGPGキーを使用することが可能です。Monkeysphereパッケージには、GPG証明書から未加工のRSAキーペアを抽出するツールが含まれています。

  1. GPG証明書には、「認証」機能フラグを持つサブキーが必要です。そのようなサブキーを作成するには、一度実行します。

    monkeysphere g
    
  2. 次に、認証サブキーをssh-agentに追加します。

    monkeysphere s
    

ある程度関連: このgnupg-usersスレッド

14
user1686

この質問の回答とgnupg-usersメーリングリストの助けを借りて、GPGキーをSSH認証に使用する方法を見つけることができました。 Claudio Floreaniが彼の回答ですでに述べたように、これを行うにはいくつかの可能な方法があります。

私はいくつかの可能な解決策についてブログ投稿を書きました: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

要約すると:現在ベータ版であるGnuPG 2.1を使用します。このバージョンを使用するときは、-enable-ssh-supportオプションを指定してgpg-agentを起動し、GPGキー(またはサブキー)のキーグリップを〜/ .gnupg/sshcontrolに追加するだけです。

現在の安定したGnuPGバージョン(2.0.x)を使用している場合は、monkeysphereを使用してキーをgpg-agentに追加できます(これも、gpg-agentを--enable-ssh-supportオプションで起動した後)。

Monkeysphereを利用してGNOMEキーリング(または通常のssh-agent)を使用することもできます。この場合の唯一の問題は、再度(GnomeまたはXFCEに)ログオンするときにキーを再度追加する必要があることです。これを解決するには、手動でキーをエクスポートして変換します。

9
jeroen