前言
Canokey是我过去几年中折腾过的最有价值的电子核桃。它支持FIDO2验证,Google、GitHub、以及本站在内的众多网站支持输入PIN码 + 按键方式登录,省却了密码泄露烦恼。它支持TOTP验证,可以为众多网站生成TOTP验证码,比如Cloudflare、DSM等等。它也支持OpenPGP,支持存储3个密钥,对应Signature key、Encryption key和Authentication key。本文讲一讲如何让SSH使用Authentication key登录。
操作系统
本机系统为麒麟银河V10,远程服务器操作系统为Ubuntu 24.04
配置流程
麒麟银河系统
安装依赖
sudo apt update
sudo apt install gnupg2 gnupg-agent scdaemon pinentry-gtk2
pinentry-gtk2 是图形化密码输入框,麒麟桌面环境通常需要它来弹出 PIN 码输入窗口。如果您是在纯命令行环境,可能需要 pinentry-curses。
配置文件
创建 ~/.gnupg/gpg-agent.conf
vi ~/.gnupg/gpg-agent.conf内容如下:
enable-ssh-support
default-cache-ttl 600
max-cache-ttl 7200
pinentry-program /usr/bin/pinentry-gtk-2
allow-loopback-pinentry然后修改~/.bashrc,在末尾粘贴如下2行:
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
export GPG_TTY=$(tty)重新加载配置文件:
gpgconf --kill gpg-agent
source ~/.bashrc输出公钥
ssh-add -L一会儿需要完整复制粘贴输出的内容
远程服务器(Ubuntu 24.04)
vi ~/.ssh/authorized_keys
# 粘贴刚才ssh-add -L得到的输出,保存退出。确保独占一行,前后没有空格
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys然后修改ssh配置文件:
vi /etc/ssh/sshd_config
# 进行如下修改:
PasswordAuthentication no
PubkeyAuthentication yes最后重启系统。此时已经无法使用密码登录SSH,必须插Canokey。登录时会弹出窗口提示输入PIN码,输入确认后就登录到了远程服务器。