Агент для ключей gpg-agent

2024-08-23 · 3 мин. для прочтения

Агент для ключей gpg-agent.

Содержание

1 Общая информация

1.1 Отличия gpg-agent от ssh-agent

  • Можно выбирать, какие конкретно ключи хранить в агенте и они там будут храниться после перезагрузки.
  • Для каждого ключа можно отдельно задать время жизни доступа к нему и дополнительное подтверждение на использование.
  • У gpg-agent есть дополнительный уровень защиты — пароль на доступ к ключу.
  • Есть GUI для контроля доступа.

2 Установка

2.1 Gentoo

  • Установим gpg:
    emerge app-crypt/gnupg
    
  • Установим приложение для ввода пароля:
    emerge app-crypt/pinentry
    

2.2 Fedora

  • Установим gpg:
    emerge app-crypt/gnupg
    
  • Установим приложение для ввода пароля:
    emerge app-crypt/pinentry
    

3 Структура

3.1 Сокеты

  • gnupg предоставляет пользовательские сокеты systemd, которые включены по умолчанию: gpg-agent.socket, gpg-agent-extra.socket, gpg-agent-browser.socket, gpg-agent-ssh.socket и dirmngr.socket
    • основной сокет gpg-agent.socket используется gpg для подключения к демону gpg-agent;
    • gpg-agent-extra.socket — настройка переадресации Unix-сокета с удалённой системы, что позволяет использовать gpg на удалённой системе без передачи на неё закрытых ключей;
    • gpg-agent-browser.socket позволяет веб-браузерам обращаться к демону gpg-agent;
    • gpg-agent-ssh.socket может использоваться SSH для кэширования ключей SSH, добавленных программой ssh-add;
    • dirmngr.socket запускает демон GnuPG, обрабатывающий соединения с серверами ключей.

4 Основные операции

4.1 Остановить, запустить, перезапустить агент

  • gpg-agent работает как демон.
  • Это демон пользовательской сессии, а не системы в целом.
  • Остановить:
gpgconf --kill gpg-agent
  • Запустить
/usr/bin/gpg-agent --daemon
  • Перезапустить:
gpgconf --kill gpg-agent
/usr/bin/gpg-agent --daemon

4.2 Просмотр списка ключей в агенте

  • Список отпечатков ключей:
$ ssh-add -l
  • Показать публичные ключи:
$ ssh-add -L
  • Можно также пользоваться командой gpg-агента:
gpg-connect-agent 'KEYINFO --ssh-list' /bye

4.3 Добавление ключа в агент

  • Добавление ключа в агент:
ssh-add ~/.ssh/id_rsa-TEST
  • Добавление ключа с TTL=60 секунд:
ssh-add -t 60 ~/.ssh/id_rsa-TEST
  • Данный вызов не модифицирует существующий ключ в ~/.gnupg/sshcontrol.
  • Добавление ключа с включённым подтверждением:
ssh-add -c ~/.ssh/id_rsa-TEST
  • Данный вызов не модифицирует существующий ключ в ~/.gnupg/sshcontrol.

4.4 Удаление ключа из агента

  • В ssh-add есть параметр -d, однако для gpg-agent он не сработает (вы можете выполнить команду, но она ничего не сделает).
  • Для полного удаления нужно пользоваться командами агента.
  • Сначала посмотрим список хранимых ключей:
ssh-add -l
  • Запоминаем хеш SHA256.
  • В файл ~/.gnupg/sshcontrol находим этот хеш.:
  • Агент использует keygrip ключа для его идентификации.
  • Именно эту строку будем использовать для удаления:
gpg-connect-agent 'DELETE_KEY 3BC01B6F0043256039006294F76C45139B703DBF' /bye
  • Проверим:
$ ssh-add -l
  • Если ключа в списке нет, то всё нормально.
  • Вручную удалите упоминания ключа из ~/.gnupg/sshcontrol.

4.5 Очистить закешированные пароли

  • Перезагрузите агент:
gpg-connect-agent reloadagent /bye

4.6 Работа агента ломается после второй одновременной сессии этого же пользователя

  • Если запустить вторую сессию с этим же пользователем (например, через RDP), то старая отваливается.
  • Починить можно так:
pkill -f gpg-agent
gpg-connect-agent /bye
pkill -f gpg-agent
rm -rf $(dirname $SSH_AUTH_SOCK)/*

5 Работа с ключами ssh

  • gpg-agent поддерживает эмуляцию агента OpenSSH.

5.1 Установка SSH_AUTH_SOCK

  • Установите переменные окружения (в ~/.bashrc):
    unset SSH_AGENT_PID
    if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]
    then
      export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
    fi
    

5.2 Добавление поддержки в gpg-agent

  • Включим поддержку ssh:
    echo enable-ssh-support >> ~/.gnupg/gpg-agent.conf
    

5.3 Добавление ключей

  • Идентификаторы одобренных для агента ключей сохраняются в ~/.gnupg/sshcontrol.
  • Рекомендуется отключить в /etc/ssh/ssh_config, ~/.ssh/config опцию AddKeysToAgent, ответственную за автоматическое добавление ключей ssh.
  • Их можно туда добавлять вручную или через ssh-add:
    ssh-add ~/.ssh/id_rsa
    ssh-add ~/.ssh/id_ed25519
    ssh-add ~/.ssh/id_ecdsa
    
  • Сначала ssh спросит парольную фразу для ключа, после чего появится диалог, где нужно выбрать пароль для шифрования ключа в агенте, обычно это простая короткая фраза (не пароль к ключу).

5.4 Основные команды

5.4.1 Просмотреть список добавленных ключей

ssh-add -l
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.