TheMoon

在XSHELL中使用FIDO2凭据登录
背景不知道现在还有多少人在SSH验证上使用密码,每次登录到服务器上后都会看到那几百万次甚至更高的错误爆破次数。密码...
扫描右侧二维码阅读全文
26
2025/02

在XSHELL中使用FIDO2凭据登录

背景

不知道现在还有多少人在SSH验证上使用密码,每次登录到服务器上后都会看到那几百万次甚至更高的错误爆破次数。密码验证的没落是历史使然,密钥一定会取代它。即便不使用额外的防护错误,想要碰撞的Bot们看到不支持密码登录的服务器后也会直接放弃后面的行动。
尽管密钥的出现使得安全性能够大幅度加强,但是它的管理和同步也带来了一些新的烦恼。由于以文件的形式进行保存,如何以安全的方式进行存放和传输也便成为了当前一些SSH客户端们所竞争的优势,当然在大部分情况下也以增值服务的形式进行提供。
在一切均可以进行“云同步”的今天,我相信有些凭据是绝对不可以采取这种方式进行操作的,特别是在这些公司甚至无法完全开放源码的前提下。

认知

开始的第一步当然是先创建一组密钥啦,由于现在的Win自带了高版本的OpenSSH,因此可以直接使用终端进行生成。
一般而言,有两种生成方式:
第一种是非常驻密钥,也就是传统的模式,不会占用物理密钥中的Passkey空间。据我的观察,类似于Ledger/uTrust这样的密钥并没有提供Passkey支持。而Yubikey在5.4.3及以下版本固件中提供25个储存位,在以上版本中提供100个储存位;Token2提供128/300个储存位;Canokey提供50个储存位。
第二种则是常驻密钥,也就是无法在生成完成后从物理密钥中恢复出“公钥/私钥”的方式。当然此处的并非传统意义上的密钥对,而仅仅是为为了调用而生成的产物。
如果不需要在多台设备上使用,或者是设备不支持,通常情况下建议选择第一种生成方式,以便在不同的设备上进行快速的导出。否则需要手动同步对应的密钥对,而且一旦丢失就彻底失去了访问权限。

实践

接下来就事不宜迟,开始生成对应的密钥对吧,切记所有的命令都需要在管理员身份下执行,否则可能会报错哦。

ssh-keygen -t ed25519-sk -O resident -O verify-required -C "Your Comment"

-t ed25519-sk指使用对应算法,-O resident指使用常驻密钥,-O verify-required指使用时进行强制验证。
记得在出现下图时一定要选择安全密钥哦~

在进行验证后,终端中便会有是否设置Passphrase的提示,这和传统密钥对的功能是一致的,各位可以根据自己的喜好选用。

默认情况下密钥对会生成到用户文件夹下的.ssh目录下。
在密钥对生成完成后,下一步自然是为自己的SSH服务器配置好对应的公钥了,这一步和传统的配置方式是完全一致的,各位可以使用ssh-copy-id或是其他方式进行配置。
如果使用可发现凭据,ssh-keygen -K则可以将对应的密钥对恢复到当前的路径下,切记在管理员身份下进行执行。

施行

配置完成后就可以使用终端内的SSH连接至对应的服务器了。

而使用OpenSSH进行登录对我而言并不方便,而我最常使用的客户端则是XSHELL,而很明显他们的Xagent还没有实现对于FIDO2的支持。
这时候就需要借助于像OpenGPG那样的扭曲方案帮助进行一些实现了。
PuTTY-CAC提供了对于FIDO2的Pageant支持,使得这变成了可能,同时可供其他客户端(例如MobaXterm)进行调用。
在安装完成后,打开Pageant,点击其中的"Add Fido Key",然后进行调用证书的添加。

之后再次打开XSHELL,选择或者导入刚刚生成的私钥,便可以正常调用FIDO2进行验证了。

结语

尽管这样做可以实现想要的功能,但是微软的验证窗口跳出逻辑似乎存在一些问题。弹出的验证窗口总是会出现在XSHELL软件的后面,只能通过任务栏点击或者切换窗口的方式过去,而且由于会弹出两次,每次都需要这样做,略显繁琐。希望能有人浇浇我解决这个问题。


参考文档:

[1] https://docs.yubico.com/hardware/yubikey/yk-tech-manual/yk5-overview.html
[2] https://documentation.ubuntu.com/server/how-to/security/openssh-server/

最后修改:2025 年 03 月 21 日 10 : 11 PM

发表评论