序言#
這幾天心血來潮開始整 WSL2 其中有一項就是在 WSL2 中使用 YubiKey
恰好這段時間也遇到了一些奇怪的問題,踩了不少坑,就順手寫篇文章記錄下吧
前提條件#
- 已安裝 ArchWSL
- 有一個 YubiKey
連接#
Windows 側#
安裝 usbipd-win
winget install --interactive --exact dorssel.usbipd-win
連接 YubiKey 後執行
usbipd list
此時的輸出應該類似於
Connected:
BUSID VID:PID DEVICE STATE
1-6 1050:0407 USB 輸入設備, Microsoft Usbccid Smartcard Reader (WUDF) Not shared
1-7 17ef:6019 USB 輸入設備 Not shared
1-8 1a2c:20c0 USB 輸入設備 Not shared
記住 VID:PID
之後有用
接下來執行
usbipd bind --busid=<BUSID>
綁定設備
之後啟動 WSL 並在 Windows 側運行
usbipd attach --wsl --busid=<BUSID>
附加 YubiKey 到 WSL
Linux 側#
安裝必需依賴
sudo pacman -S usbip usbutils
此時執行 lsusb
如果輸出中包含 YubiKey
字樣 恭喜你已經成功將 YubiKey 連接到 WSL 了
配置#
安裝 yubikey-manager
並啟動 pcscd.service
sudo pacman -S yubikey-manager pcsclite pcsc-tools
sudo systemctl enable --now pcscd.service
執行 ykman info
命令 不出意外應該是出意外了 提示 No Yubikey detected
並且 GPG 也無法讀取到 Key
這時我們需要配置一些 udev 規則
首先 我們需要新建一個名為 scard
的用戶組 並把自己的用戶添加進去
sudo groupadd scard
sudo usermod -aG scard $whoami
重啟 WSL 並添加以下文件
``` TEXT filename="/etc/udev/rules.d/10-security-key.rules" KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0664", GROUP="users", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0" ``` ```TEXT filename="/etc/udev/rules.d/71-gnupg-ccid.rules" ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="660", GROUP="scard" ``` 這裡的 VENDOR 和 MODEL 需要根據自己的設備進行修改還記得之前我們記下來的 VID 嗎
它們就分別對應了 VENDOR 和 MODEL
使用 sudo udevadm trigger
重載 udev 規則
這時你會發現 ykman info
已經可以使用 但是 GPG 仍然無法讀取到 Key
這是由於 Polkit
限制了本地客戶端的權限 所以我們還需要添加一個 Polkit
規則
polkit.addRule(function(action, subject) {
if (action.id == "org.debian.pcsc-lite.access_card" &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
polkit.addRule(function(action, subject) {
if (action.id == "org.debian.pcsc-lite.access_pcsc" &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
Important
使用上述規則前請確保您的用戶位於 wheel
用戶組中 否則規則將不會工作
然後重啟 polkit.service
sudo systemctl restart polkit.service
此時 GPG 應當正常工作
後記#
不得不說這玩意是真麻煩 耗了我半天時間找解決方法 累死我了
此文由 Mix Space 同步更新至 xLog
原始鏈接為 https://lar.moe/posts/tech/using-yubikey-in-wsl2