長話短說: 有沒有辦法停用持久導入功能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 允許您匯入軟體產生的金鑰。)
設定 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
如果您沒有較新的PKCS#11 工具
ykman
,您可以使用較舊的yubico-piv-tool
甚至各種通用 PKCS#11 工具(例如 OpenSCpkcs11-tool
或 GnuTLSp11tool
):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 上也很容易使用,因為Windows 已經有PIV 智慧卡的驅動程式(例如透過PuTTY-CAC 或將CAPI/CNG 金鑰儲存橋接到SSH 用戶端的其他幾個項目) 。