使用 gpg-agent 和另一個金鑰來源進行 SSH 驗證?

使用 gpg-agent 和另一個金鑰來源進行 SSH 驗證?

長話短說: 有沒有辦法停用持久導入功能gpg-agent或解決該問題以允許使用不同的 SSH 金鑰來源?

情況

我用GnuPG 2 鍵(在 YubiKey 上)通過gpg-agent的進行 SSH 身份驗證enable-ssh-support。這很好用。

我有其他鍵可用(檔案系統和 KeePassXC)。當使用ssh-add或 KeePassXC 添加它們時,它們由 導入gpg-agent並存儲在~/.gnupg/private-keys-v1.d/.我需要提供一個額外的密碼來加密這些密碼。

問題

這正如宣傳的那樣工作,但違背了將密鑰存儲在其他地方的目的:

  • 我想要 KeePassXC暫時添加鍵ssh-agent到解鎖密碼資料庫時的目前狀態。之後密鑰不應永久可用。
  • 與從 shell 取得密鑰檔案類似ssh-add:我不想在必須提供更多密碼的情況下匯入並保留這些檔案。

如何在允許使用所有密鑰來源的同時避免導入?我的一個想法是在同一台機器上設定多個代理,可能會gpg-agent轉發到本地ssh-agent,但這聽起來可能過於複雜。

類似的問題是這個 KeePassXC 問題,但沒有提出解決方案。

答案1

第三個選項:不透過 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 也提供了自己的 Yubikey 特定libykcs11.so模組作為yubico-piv-tool 的一部分,但由於後者現已棄用,我認為libykcs11.so 也已棄用,您應該只使用OpenSC 的通用PIV 支援。在實踐通用PIV 支援。在實踐通用PIV 支援。中這兩個模組是可以互換的,並且可以毫無問題地識別彼此的物件。

請注意,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
    

    如果您沒有較新的PKCS#11 工具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 上也很容易使用,因為Windows 已經有PIV 智慧卡的驅動程式(例如透過PuTTY-CAC 或將CAPI/CNG 金鑰儲存橋接到SSH 用戶端的其他幾個項目) 。

相關內容