YubiKey 在 WSL 中无法工作(未找到设备),但在 Windows 下直接运行正常

YubiKey 在 WSL 中无法工作(未找到设备),但在 Windows 下直接运行正常

我使用 Yubikey 连接多个服务器。我在 Windows 下执行此操作,这与 .ssh 目录中的 sshconfig 配合得很好。

现在我遇到一种情况,我需要在 Linux 下运行一些东西,并使用 YubiKey 连接到相同的服务器。所以我安装了 WSL(Ubuntu),并将我的配置和密钥从我的 Windows SSH 配置复制到 WSL 环境。当连接到仅使用密码或仅使用密钥文件而不使用 YubiKey 的服务器时,SSH 通常可以正常工作。

但是每个需要 YubiKey 的连接都会失败并出现以下错误(由于显而易见的原因,更改了 IP 和名称):

Confirm user presence for key ED25519-SK SHA256:BnVjcbhrBbURNA7KSkTI22C0Z9/6avSGpC72GbIvOJw
sign_and_send_pubkey: signing failed for ED25519-SK "/home/kgr/.ssh/keys/admin@server": device not found
[email protected]: Permission denied (publickey).

遗憾的是,我没有找到有关此处发生的“未找到设备”的任何信息。

有任何提示可能导致这种情况的原因吗?或者 WSL 是否需要一些特殊步骤才能正确使用 YubiKey?

编辑:我忘了提一些事情,因为这没什么区别:

我关注了https://levelup.gitconnected.com/how-to-use-a-yubikey-in-wsl2-linux-on-windows-96f176518583但没有成功。一旦我尝试在 WSL 中使用任何 gpg 命令,它就会说没有这样的设备,而在 Windows 中它可以工作。

我还在网上发现一些评论,自 Gpg4win 版本 4 以来,.bashrc 条目必须指向 AppDataLocal 中的配置。但我也尝试过,并没有什么区别。

编辑2:经过一些有用的评论,我可以在 WSL 中使用 gpg --card-status 查看我的卡。无论如何,ssh 连接仍然失败并出现相同的错误。运行 gpg --card-status 时我注意到的一件事是“版本”条目显示“0”。不确定这有多大关系。由于目前一切似乎都正常,但 ssh 失败了,所以我有点不知所措。

答案1

文章 如何在 Windows 上的 WSL2(Linux)中使用 Yubikey 包含所需的 WSL2 设置。

安装所需的软件包:

sudo apt update
sudo apt upgrade
sudo apt install socat iproute2
mkdir ~/.ssh
wget https://github.com/BlackReloaded/wsl2-ssh-pageant/releases/latest/download/wsl2-ssh-pageant.exe -O ~/.ssh/wsl2-ssh-pageant.exe
chmod +x ~/.ssh/wsl2-ssh-pageant.exe

将以下内容附加到您的~/.bashrc文件:

# SSH Socket
# Removing Linux SSH socket and replacing it by link to wsl2-ssh pageant socketexport SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"
if ! ss -a | grep -q "$SSH_AUTH_SOCK"; then
  rm -f "$SSH_AUTH_SOCK"
  wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe"
  if test -x "$wsl2_ssh_pageant_bin"; then
    (setsid nohup socat UNIX-LISTEN:"$SSH_AUTH_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin" >/dev/null 2>&1 &)
  else
    echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
  fi
  unset wsl2_ssh_pageant_bin
fi# GPG Socket
# Removing Linux GPG Agent socket and replacing it by link to wsl2-ssh-pageant GPG socketexport GPG_AGENT_SOCK="$HOME/.gnupg/S.gpg-agent"
if ! ss -a | grep -q "$GPG_AGENT_SOCK"; then
  rm -rf "$GPG_AGENT_SOCK"
  wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe"
  if test -x "$wsl2_ssh_pageant_bin"; then
    (setsid nohup socat UNIX-LISTEN:"$GPG_AGENT_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin --gpg S.gpg-agent" >/dev/null 2>&1 &)
  else
    echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable."
  fi
  unset wsl2_ssh_pageant_bin
fi

现在重新启动 WSL2:

wsl.exe --shutdown

要测试 WSL2 中对 YubiKey 的访问,请尝试gpg --card-status 获取有关 yubikey 的信息。

要将密钥可信度更改为 ultimate :

$ gpg --edit-key 1CA87B39873495770098080098336BC4E5C445AB
gpg> trust
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menuYour decision? 5
Do you really want to set this key to ultimate trust? (y/N) y
gpg> quit

如果您现在运行gpg --list-keys密钥应该具有最终的信任。

有关更多详细信息,请参阅链接的文章。

相关内容