GPG ключ может использоваться для подписи коммитов в Git. Подписанный коммит подтверждает, что он сделан именно текущим автором, а в GitHub, при должных настройках, коммиты отображаются с галочкой. Чуть более подробно про GPG тут.
GitHub поддерживает несколько алгоритмов шифрования GPG ключей:
- RSA
- ElGamal
- DSA
- ECDH
- ECDSA
- EdDSA
gpg --full-generate-key
- Выбираем алгоритм шифрования (по умолчанию RSA)
- Указывем длину ключа — 4096
- Выбираем срок действия (по умолчанию бессрочный)
- Указываем имя, почту, комментарий
- Указываем кодовую фразу-пароль
gpg --list-secret-keys --keyid-format=long
Выведется список GPG ключей. Пример:
/c/Users/User/.gnupg/pubring.kbx
--------------------------------
sec rsa4096/9FE9LIOBNN1481D5 2022-03-30 [SC]
B56B138FAE407B9F89EF3CFE9FE9LIOBNN1481D5
uid [ultimate] Sergey <levensta@student.21-school.ru>
ssb rsa4096/1580A40759FDED30 2022-03-30 [E]
На примере key ID — 9FE9LIOBNN1481D5
gpg --armor --export <key ID>
Выведется ключ в ASCII формате. Копируем, начиная со строчки -----BEGIN PGP PUBLIC KEY BLOCK-----
и заканчивая -----END PGP PUBLIC KEY BLOCK-----
.
Далее вставляем в настройках GitHub: Access > SSH and GPG keys > New GPG key. Чтобы отображать не/подписанные коммиты, ставим галочку на Vigilant mode
git config --global commit.gpgsign true
В некоторых случаях нужно указать название команды-бинарника. По умолчанию git использует gpg
, но может быть gpg1
или gpg2
:
git config --global gpg.program gpg
Указываем ключ. Можно только один, поэтому если нужно использовать другой для конкретного репозитория, ставим без флага --global
:
git config --global user.signingkey <key ID>
На Linux понадобится обновить bash-профиль и перезапустить терминал:
echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile
echo 'export GPG_TTY=$(tty)' >> ~/.profile
echo 'export GPG_TTY=$(tty)' >> ~/.bashrc
Или на MacOS
echo 'export GPG_TTY=$(tty)' >> ~/.zshrc
echo 'export GPG_TTY=$(tty)' >> ~/.zprofile
gpg --export-secret-keys <key ID> > private.key
gpg --import private.key