要約: gpg-agent
永続的なインポート機能を無効にするか、それを回避して SSH キーに異なるソースを使用できるようにする方法はありますか?
状況
私が使うGnuPG 2 キー(YubiKey 上) の を介した SSH 認証用gpg-agent
。enable-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 ではソフトウェアで生成されたキーをインポートできます。)
PIN を設定します (忘れた PIN をブロック解除するための PUK も設定します)。どちらも英数字で、6 ~ 8 文字の長さにする必要があります。
ykman piv change-pin -P 123456 ykman piv change-puk -p 12345678
キーと自己署名証明書(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
公開鍵を authorized_keys 形式でエクスポートします。
ssh-keygen -D opensc-pkcs11.so > Yubikey.pub
ssh -I
接続時にオプションまたは設定を使用しますPKCS11Provider
。(毎回スマートカードの PIN の入力を求められます。これを減らすには、必要に応じて SSH 接続の多重化を設定します。)
このアプローチには他の利点もあります。Windows にはすでに PIV スマートカード用のドライバーがあるため (たとえば、PuTTY-CAC や、CAPI/CNG キー ストレージを SSH クライアントにブリッジする他のいくつかのプロジェクトを通じて)、Windows でも非常に簡単に使用できます。