Агент для ключей 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