SSH¶
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。