# 前言

SSH 登录中密钥认证肯定是比密码认证安全性更高一些(虽然我的 ssh 密码基本上都是用密码器生成的),但是密钥文件管理确实一个很大的问题,以前服务器(设备)不多的时候倒觉得无所谓,现在多起来了管理就特别麻烦。

很多时候我自己都忘记哪台服务器的密钥是哪个了,然后再加上又要解锁密码库获得 64 位 + 的密钥文件密码,感觉每次登录服务器都是一种折磨……

后来偶然一次在网上看到了 yubikey 使用 gpg 认证 ssh 的文章,感觉采用这种方式登录服务器是真的方便,不用担心密钥文件,并且只要随身带着 key,还可以在其他地方登录服务器。

刚好我自己也有一个 Canokey,平时用它进行 git commit 签名和 Webauthn 的登录,感觉还是有点大材小用了(然而光 Webauthn 这个功能就给我带来了很多方便),因此打算更加 “压榨” 一下我的 Key(doge)

但是,网上的教程多半是在 Linux 平台上的,对于 Windows 上的教程真的是少之又少。要么是残缺不全的,要么就是过于复杂实用性极低的,或者干脆是不成功的…… 总之各种都有。

不过我也总结了一下那些教程,基本是围绕 gpg-agent 进行的,原理是让 openssh 使用 gpg-agent 进行认证而不是使用 ssh-agent。然后就是各种妖魔方法,有设置 SOCK 环境变量的,有改 gpg-agent.conf 的,有用 ps 设置各种奇怪的环境变量的,有添加奇妙的计划任务的……

我只能说,在 Windows 平台上整这些不如去 Linux 整,怎么改都没问题, rm -rf /* 都行。

# 正文

这里的核心软件是 Tabby ,一款开源,颜值在线(重要!!!),功能齐全,支持多语言(包括简体中文!!!)的超好用终端。(据说前身是 Termius)

下面是本次用到的软件链接:

首先我们下载 Gpg4win,下载完成后安装,安装时可以将 Kleopatra 也勾选安装,这样在生成 PGP 密钥和导入 Key 时会方便很多,当然你非要用 gpg 命令也行。

安装完成后生成自己的 PGP 密钥并导入智能卡中,具体的生成和导入以及使用子密钥的教程网上是一大片,可以自行搜索,使用 Kleopatra 的话那就更简单,这里就不再阐述了。

然后我们下载 Tabby,下载完成后安装。

图片

中文语言需要自行去设置里设置

这里我们点击右上角的设置按钮,进入 配置和连接 ,点击 新建 按钮新建配置(注:这里不使用主界面标签卡旁边的按钮快速连接终端,因为这种方式默认采用密码和密钥登录,无法使用 gpg 代理登录)。

在弹出的窗口中选择 SSH 连接 ,填写自己主机相关信息即可,身份验证方式选择 代理 ,然后保存即可。

Tips:这里的 主机 请直接填写 IP 或者域名,不要像 ssh 那样 用户名@地址 这样,否则无法正常连接主机!!!

现在不着急连接,还需要将 gpg 公钥导出添加到服务器 ~/.ssh/authorized_keys 内(没有就创建一个),记得在文件尾多追加一个换行。

并且这种方式并不会影响原来的密钥,你只要将 gpg 公钥在新的一行插入即可,这样服务器可以同时用两种密钥登录。

添加完成后重启服务器的 ssh 服务。

回到客户端这边,这时我们点击新添加出来的那个配置文件旁边一个类似播放的按钮连接服务器。

不出差错将会弹出输入智能卡 PIN 的窗口,输入完 PIN 即可成功连接服务器!

如果设置了需要触摸确认可能还需要触摸一下触摸点。

之后我们可以在主界面点击标签栏旁边的按钮(配置和连接),选择我们之前的配置快速连接。