Как настроить кэширование ключевых фраз SSH с помощью агента GnuPG в NixOS?

#ssh #gnupg #nixos

#ssh #gnupg #nixos

Вопрос:

Я использую NixOS (на данный момент нестабильный канал) удаленно, через SSH, поэтому графической среды нет. Я часто нажимаю и извлекаю репозитории Git, и повторный ввод ключевой фразы для ключей SSH быстро устаревает, поэтому я пытаюсь настроить агент для кэширования ключевой фразы.

В последних версиях рекомендуется использовать GnuPG Agent с поддержкой SSH. Я включил агент, раскомментировав следующие строки в configuration.nix:

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

Имеет ли здесь значение выбор pinentryFlavor ? Я предполагаю, что SSH запрашивает ключи с помощью собственного запроса и кэширует их с помощью агента, но подтверждение было бы неплохо. Как я уже сказал, я не использую графический интерфейс.

Главный вопрос: похоже, это не работает, просто включив агент из configuration.nix. Что-то еще явно нужно сделать, но я не могу найти никакой документации о том, как правильно включить агент в NixOS.

Комментарии:

1. Одна из немногих заметок, которые я смог найти по этому поводу, была такой: gist.github.com/CMCDragonkai/2a99df87f280df835e9b7e190d8f46ec но он жалуется, что нет службы под названием gpg-agent. Я был уверен, что nixos-rebuild переключится после изменения конфигурации, так что это не должно быть проблемой.

2. мой NixOS ssh-agent не работал, так как я непреднамеренно оставил это обходное решение для ssh-agent в системах Ubuntu в своих dotfiles, внутри .bashrc . Отключение этого позволит ssh-агенту nix начать работу в новых терминалах.

Ответ №1:

Глобальная configuration.nix настройка конфигурации на /etc/bashrc для вызова gpg-connect-agent при запуске bash и /etc/set-environment для установки SSH_AUTH_SOCK переменной среды. Он также добавляет общесистемные модули systemd для каждого пользователя в /etc/systemd/user/gpg-agent* , которые запускают ключевые агенты GnuPG для каждого пользователя.

Наконец, вы должны быть уверены, что добавили ключ к агенту с помощью ssh-add команды; он не добавляется автоматически, когда SSH запрашивает ключевую фразу-пароль.

Этого должно быть достаточно, чтобы заставить агент GnuPG работать с SSH. Выбор pinentryFlavor также не должен иметь эффекта при использовании через терминал. Оказывается, вы должны установить pinentryFlavor значение curses при использовании через терминал. Если вы этого не сделаете, агент выдает ошибку при повторной аутентификации.

(Я не уверен, почему я столкнулся с различными ошибками при первом включении GnupPG. Теперь он работает с настройками по умолчанию. Возможно, что служба systemd была запущена неправильно.)