用于服务器管理的SSH#

本指南解释了如何准备你的SSH服务器和客户端,以便与Nitrokey一起使用。

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

关于客户的准备工作#

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

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

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

  • 在你的~/.bashrc中的某个地方添加以下代码(对于fish shell,请看`这里 <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