gpg-agent と別のキーソースを使用した SSH 認証ですか?

gpg-agent と別のキーソースを使用した SSH 認証ですか?

要約: gpg-agent永続的なインポート機能を無効にするか、それを回避して SSH キーに異なるソースを使用できるようにする方法はありますか?

状況

私が使うGnuPG 2 キー(YubiKey 上) の を介した SSH 認証用gpg-agentenable-ssh-supportこれは正常に動作します。

私は持っていますその他のキー利用可能です (ファイルシステムと KeePassXC)。ssh-addまたは KeePassXC を使用してこれらを追加すると、 によってインポートされgpg-agent、 に保存されます~/.gnupg/private-keys-v1.d/。 これらを暗号化するには、追加のパスワードを指定する必要があります。

問題

これは宣伝どおりに機能しますが、キーを他の場所に保存する目的が達成されません。

  • KeePassXCに一時的にキーを追加するssh-agentパスワード データベースのロックを解除するときに、現在のパスワードに戻します。その後、キーは永続的に使用できないようにする必要があります。
  • シェルからキー ファイルをインポートする場合も同様ですssh-add。さらに多くのパスワードを入力しながら、それらをインポートして保持したくありません。

すべてのキー ソースを使用できるようにしながら、インポートを回避するにはどうすればよいですか? 私が考えていた 1 つのアイデアは、同じマシンに複数のエージェントを設定し、gpg-agentローカルに転送することでしたssh-agentが、これは複雑すぎるように思えます。

同様の問題は、このKeePassXCの問題しかし、解決策は提案されませんでした。

答え1

3 番目のオプション: gpg-agent 経由で Yubikey を使用する代わりに、PKCS#11 経由で PIV スマートカード サポートを使用します。これは、OpenSSH によってネイティブにサポートされていますPKCS11Provider

ssh -I opensc-pkcs11.so root@myhost

ssh-agent は PKCS#11 キーも認識できるようになります。

ssh-add -s opensc-pkcs11.so

(Yubico は、yubico-piv-tool の一部として独自の Yubikey 固有のlibykcs11.soモジュールも提供していますが、後者は現在非推奨となっているため、libykcs11.so も非推奨となり、OpenSC の汎用 PIV サポートを使用する必要があると思われます。実際には、2 つのモジュールは互換性があり、問題なく互いのオブジェクトを認識します。)

Yubikey の OpenPGP と PIV アプレットは完全に独立しており、それらの間でキーを移動することはできません。そのため、ハードウェアで生成されたキーペアの場合は、残念ながら を使用して新しいキーペアを作成する必要がありますykman piv。(ただし、Yubikey ではソフトウェアで生成されたキーをインポートできます。)

  1. PIN を設定します (忘れた PIN をブロック解除するための PUK も設定します)。どちらも英数字で、6 ~ 8 文字の長さにする必要があります。

    ykman piv change-pin -P 123456
    ykman piv change-puk -p 12345678
    
  2. キーと自己署名証明書(SSH では無視されます)を生成します。

    ykman piv info
    ykman piv generate-key -a ECCP256 9a /tmp/9a.pub
    ykman piv generate-certificate 9a /tmp/9a.pub -s "Thomas" -d 3650
    rm /tmp/9a.pub
    

    新しい をお持ちでない場合はykman、古いものyubico-piv-toolや、さまざまな汎用 PKCS#11 ツール (OpenSCpkcs11-toolや GnuTLS などp11tool) を使用できます。

    yubico-piv-tool -a change-pin -P 123456
    yubico-piv-tool -a change-puk -P 12345678
    yubico-piv-tool -a status
    yubico-piv-tool -a generate -A ECCP256 -s 9a -o /tmp/9a.pub
    yubico-piv-tool -a verify-pin -a selfsign-certificate \
                    -s 9a -S "/CN=Thomas" -i /tmp/9a.pub -o /tmp/9a.crt
    yubico-piv-tool -a import-certificate -s 9a -i /tmp/9a.crt
    
  3. 公開鍵を authorized_keys 形式でエクスポートします。

    ssh-keygen -D opensc-pkcs11.so > Yubikey.pub
    
  4. ssh -I接続時にオプションまたは設定を使用しますPKCS11Provider。(毎回スマートカードの PIN の入力を求められます。これを減らすには、必要に応じて SSH 接続の多重化を設定します。)

このアプローチには他の利点もあります。Windows にはすでに PIV スマートカード用のドライバーがあるため (たとえば、PuTTY-CAC や、CAPI/CNG キー ストレージを SSH クライアントにブリッジする他のいくつかのプロジェクトを通じて)、Windows でも非常に簡単に使用できます。

関連情報