Skip to content

Instantly share code, notes, and snippets.

@levensta
Created March 30, 2022 03:49
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save levensta/811d31b65a3e778cc846b71bf5172c7b to your computer and use it in GitHub Desktop.
Save levensta/811d31b65a3e778cc846b71bf5172c7b to your computer and use it in GitHub Desktop.
GPG ключи для Git

GPG ключи для Git

GPG ключ может использоваться для подписи коммитов в Git. Подписанный коммит подтверждает, что он сделан именно текущим автором, а в GitHub, при должных настройках, коммиты отображаются с галочкой. Чуть более подробно про GPG тут.

GitHub поддерживает несколько алгоритмов шифрования GPG ключей:

  • RSA
  • ElGamal
  • DSA
  • ECDH
  • ECDSA
  • EdDSA

Сгенерировать новый ключ

gpg --full-generate-key
  1. Выбираем алгоритм шифрования (по умолчанию RSA)
  2. Указывем длину ключа — 4096
  3. Выбираем срок действия (по умолчанию бессрочный)
  4. Указываем имя, почту, комментарий
  5. Указываем кодовую фразу-пароль

Посмотреть существующие ключи

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

Расшифровать ключ в ASCII

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

Подпись коммитов GPG ключом

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment