V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
swchzq
V2EX  ›  YubiKey

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

  •  
  •   swchzq · 2019-10-09 13:55:36 +08:00 · 12107 次点击
    这是一个创建于 1906 天前的主题,其中的信息可能已经有所发展或是发生改变。

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