SSH

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

inactive

inactive

active

inactive

active

active

inactive

This guide explains how to prepare your SSH server and client for use with the Nitrokey. For configuring PuTTY, see this guide:

Nitrokey应该已经安装了PGP密钥,本地的GnuPG钥匙圈应该知道这些密钥。

关于客户的准备工作

  • 确保 ~/.gnupg/gpg.conf 包含 'use-agent'。

  • 在 ~/.gnupg/gpg-agent.conf 中加入 'enable-ssh-support',为 gnupg-agent 增加 ssh 支持。

  • 如果该文件还不存在,你可以直接创建它。

  • 在你的~/.bashrc中的某处添加以下代码(对于鱼壳,请看`这里 <https://support.nitrokey.com/t/ssh-auth-with-fish-instead-of-bash/2206>`__)。

unset SSH_AGENT_PID
if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
fi
  • 只需重新启动你的系统或尝试``pkill gpg-agent``并打开一个新的命令行以确保一切都已设置好

  • 如果出现问题,请在第一次使用时尝试``gpg2 --card-status``,以确保 gpg-agent 得到启动。

为服务器做准备

你可以通过运行以下命令之一来生成一个authorized_keys文件

gpg2 --export-ssh-key keyID >> ~/authorized_keys

其中

keyID

是在你的Nitrokey上用于认证的子键ID。Nitrokey必须已经被本地的GnuPG钥匙圈所知。你现在可以将该文件添加到远程服务器的authorized_keys中,当你ssh到该服务器时,就会要求你输入密码而不是口令。

故障排除

如果你仍然被要求提供密码,请确保

echo $SSH_AUTH_SOCK

返回类似'/run/user/1000/gnupg/S.gpg-agent.ssh'或'/home/username/.gnupg/.S.gpg-agent.ssh'。不幸的是,GnuPG在过去有一些变化,所以实际内容可能因系统和GnuPG版本而异。在一些系统中,这个变量中甚至可能保存有多个文件夹。你必须调整上述.bashrc中的代码,使SSH_AUTH_SOCK这个变量正确。如有疑问,请在.bashrc中查找'SSH_AUTH_SOCK'。

man gpg-agent

来找到你的版本/系统的实际代码。

你可以通过你的软件包管理器检查你是否安装了'pinentry'程序。你可能需要`在 gpg-agent.conf <https://wiki.archlinux.org/index.php/GnuPG#pinentry>`__中也设置它。你可能需要 将 gpg-agent 指向正确的 TTY