swchzq
V2EX  ›  YubiKey

在 Windows 上愉快的使用 Yubikey 登录 SSH

  •  
  •   swchzq · Oct 9, 2019 · 13666 views
  •   You need to sign in to view this topic
    This topic created in 2480 days ago, the information mentioned may be changed or developed.

    目前网上很少关于 Windows 上使用 Yubikey 登录 SSH 的资料,而且绝大部分教程都是教你怎么使用 OpenPGP 模式,通过 gpg-agent 完成 SSH 认证。使用 gpg-agent 在 Windows 上的局限性是很大的,很多第三方 SSH 客户端( SecureCRT 之类的)并不能通过 gpg-agent 完成认证,使用起来非常不方便。

    因此,我写了个工具(https://www.v2ex.com/t/565640),简化了在 Windows 系统上使用 SSH 和 Yubikey 的流程。本篇教程基于这个工具,简要介绍在 Windows 上配置 Yubikey PIV 智能卡,以及登录 SSH 的流程。

    1. 工具准备

    2. 初始化 PIV 证书

    打开 Yubikey Manager, 在Applications中选择PIV, 然后选择Configure Certificates。在Authentication槽位下选择Generate生成证书。算法推荐选 RSA2048,兼容性和安全性都较好。生成好后就可以看到Authentication槽位下有证书了:

    1.png

    3. 查看公钥

    打开 WinCrypt SSH Agent,在任务栏托盘的图标上右键,选择Show Public Keys,就可以看到你刚刚生成的证书对应的 SSH 公钥了,将这个公钥添加到服务器~/.ssh/authorized_keys中即可。

    如果显示了多个公钥,这是应为你有多个数字证书,可以根据公钥结尾的名称区分对应的是哪个证书。

    4. 设置环境变量

    打开 WinCrypt SSH Agent,在任务栏托盘的图标上右键,选择你需要使用的 SSH 客户端类型,设置对应的环境变量即可。这里以 WSL 为例介绍:

    • 在任务栏托盘的图标上右键,选择WSL Help
    • 打开 WSL,贴入刚刚显示的命令
    • SSH 连接服务器即可

    2.png

    如果想不用每次都设置环境变量,可以对环境变量做持久化,并把 WinCrypt SSH Agent 加入开机启动项。

    WSL 和 Cygwin 可以在.bashrc 中设置

    WinSSH 和 SecureCRT 可以在 Windows 的系统设置中配置

    11 replies    2022-07-23 20:51:47 +08:00
    commoccoom
        1
    commoccoom  
       Oct 25, 2019
    楼主,你好,我按照你的教程试了一下,用 yubikey 生成证书后,使用 Show Public Keys,但是没有任何公钥显示,这是因为什么?
    commoccoom
        2
    commoccoom  
       Oct 25, 2019
    重启一下电脑,之后就可以显示了😂
    swchzq
        3
    swchzq  
    OP
       Oct 25, 2019
    @commoccoom 重新插拔下 yubikey 应该就行, windows 是在智能卡插入的时候读取证书的
    commoccoom
        4
    commoccoom  
       Oct 25, 2019
    @swchzq Xshell 怎么设置,好像没有给出操作说明
    swchzq
        5
    swchzq  
    OP
       Oct 28, 2019
    @commoccoom Xshell 需要开启外部 ssh agent, 有个选项好像是叫启用 Pageant, 你可以找找看
    commoccoom
        6
    commoccoom  
       Oct 28, 2019
    @swchzq 好的,非常感谢!
    sxul07
        7
    sxul07  
       Nov 23, 2019
    /w\ 话说大佬这个工具有没有能从 linux 机器把 gpg-agent 转到 windows 的操作啊 遇到这个问题了
    swchzq
        8
    swchzq  
    OP
       Nov 25, 2019
    @sxul07 我这个工具是处理 ssh agent 的, 没处理 gpg agent. linux 下的 gpg-agent 监听了个 unix socket 文件, 可以用 socat 转成 tcp socket 就可以让远程主机访问. 我没研究 windows 上的 gpg 是怎么和 agent 通信的, 应该有资料. 弄明白怎么通信的, 写个脚本把 tcp socket 转回对应的格式就能在 windows 上用了. 思路大致是这样, 你可以试试
    yume233
        9
    yume233  
       Jul 12, 2022
    楼主您好,我在删除 yubikey Authentication 槽位下的证书又重新生成了一个之后 Show Public Keys 会把旧的公钥和新的公钥同时显示出来,并且如果再次删除旧的生成新的,Show Public Keys 就不会再出现公钥了,请问有办法解决吗
    swchzq
        10
    swchzq  
    OP
       Jul 15, 2022
    @yume233 去 certmgr.msc 里面把旧的证书删除了。如果不会再出现公钥,重新插拔 yubikey ,系统会重新读取证书。
    yume233
        11
    yume233  
       Jul 23, 2022
    @swchzq 恢复了!感谢楼主_(:з」∠)_
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5362 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 08:24 · PVG 16:24 · LAX 01:24 · JFK 04:24
    ♥ Do have faith in what you're doing.