通过 SSH(特别是 Git)进行身份验证时,如何缓存 Yubikey/U2F 凭证?

通过 SSH(特别是 Git)进行身份验证时,如何缓存 Yubikey/U2F 凭证?

我已经设置了我的使用 U2F 的 GitHub 帐户使用 Yubikey(通过 SSH),但我还使用Git bash 提示符,因此每次我使用终端时,系统都会提示我触摸安全密钥。

我不太了解 SSH 凭证、密钥和 FIDO U2F 标准之间的关系,所以我不确定如何设置我的环境以停止每次使用终端时提示我。

我可以将其配置为仅询问一次,比如每天一次或每个会话一次等吗?

答案1

首先,U2F 是设计上不可缓存。它不仅仅是一个密码;它是一个质询/响应协议,其中令牌每次都会收到不同的“质询”,并在没有曾经向 PC 透露其密钥(基本上像智能卡一样)。这就是它的主要优势所在。

Yubikey 的经典一次性密码也是如此。顾名思义,它们是一度,并且服务器绝不会接受相同的密码超过一次,也不会接受任何比已经接受过的密码更旧的密码。

话虽如此,您可以做两件事:

  • 首先,弄清楚要求你提供凭证的原因是什么,因为这肯定是不是SSH。U2F 支持补丁尚未合并到 OpenSSH,并且从未要求任何交互式输入 - 它只使用 SSH 密钥对,而不是密码+2fa。ssh [email protected]

    类似地,如果您实际上是通过 HTTPS 而不是 SSH 进行推送,据我所知,HTTP 身份验证中仍然没有 U2F 集成,因此最多会要求您输入 6 位数的代码。

    如果您有全尺寸的 Yubikey,请在出现提示时检查其指示灯是否闪烁。它仅在等待 U2F 确认时闪烁 - 如果指示灯稳定,则会发送经典的一次性密码。如果您可以Yubikey 输入长密码,这不是 U2F。

  • 二、对于SSH一般来说,您可以启用 OpenSSH 的连接缓存/多路复用功能。登录到服务器后,即使您关闭远程 shell(即,即使 Git 完成传输后),OpenSSH 仍会将该连接保持几分钟。

    为此,请将以下内容放入您的~/.ssh/config

    Host *
        ControlMaster auto
        ControlPath ~/.ssh/S.%r@%h:%p
        ControlPersist 5m
    

    (旧版 OpenSSH 不支持 ControlPersist,因此您可以保留其他两个选项,但需要使用 手动启动连接。)ssh -fNM [email protected]

相关内容