如何在 NixOS 中使用 GnuPG 代理设置 SSH 关键字缓存?

How to set up SSH keyphrase caching with GnuPG Agent in NixOS?

我正在通过 SSH 远程使用 NixOS(目前通道不稳定),因此没有图形环境。我经常推送和拉取 Git 个存储库,重新输入 SSH 密钥的密码很快就会变旧,所以我正在尝试设置一个代理来缓存密码。

对于最新版本,使用支持 SSH 的 GnuPG 代理似乎是推荐的选择。我通过取消注释 configuration.nix 中的以下行来启用代理:

  programs.gnupg.agent = {
    enable = true;
    enableSSHSupport = true;
    pinentryFlavor = "gnome3";
  };

pinentryFlavor 的选择在这里重要吗?我想象 SSH 通过它自己的提示询问密钥,并使用代理缓存它们,但确认会很好。正如我所说,我没有使用图形界面。

主要问题:仅通过从 configuration.nix 启用代理似乎不起作用。显然还需要做一些其他事情,但我找不到任何关于如何在 NixOS 中正确启用代理的文档。

全局 configuration.nix/etc/bashrc 设置配置以在 bash 启动时调用 gpg-connect-agent/etc/set-environment 设置 SSH_AUTH_SOCK环境变量。它还在 /etc/systemd/user/gpg-agent* 处添加了系统范围 per-user systemd 单元 运行 per-user GnuPG 密钥代理。

最后一定要确保使用ssh-add命令将密钥添加到代理中;当 SSH 提示密钥密码时,它不会自动添加。

这应该足以使 GnuPG 代理与 SSH 一起工作。 pinentryFlavor 的选择在终端上使用时不应该也有影响。 原来你 应该 设置 pinentryFlavor 到在终端上使用时诅咒。如果您不这样做,代理会在 re-authenticating.

时抛出错误

(我不确定为什么我在第一次启用 GnupPG 时遇到各种错误情况。它现在可以使用默认设置。可能是 systemd 服务未正确启动。)