Подпишите ваши коммиты!!!

БЕЖАТЬ
Сохранять спокойствие

Если вы являетесь пользователем github, вы могли видеть это проверено подпись рядом с некоторыми коммитами.

Что это значит? Являются ли они частью тайного общества проверенных пользователей? Должен ли я тоже подписывать свои коммиты?

Подписанный коммит на Github

Давайте будем настоящими, нам всем нравятся блестящие зеленые значки рядом с нашими коммитами, это дает нам ощущение силы.
Хорошие новости! В этой записи блога вы узнаете, как подписывать свои коммиты с помощью ключей GPG или SSH.


Оглавление


Использование GPG для подписи коммитов

Прежде чем мы начнем, пожалуйста, проверьте версию gpg обновляется, запустив gpg --version
Мой gpg (GnuPG) 2.2.37.


Генерация GPG-ключа

gpg --full-generate-key
Войти в полноэкранный режим

Выйти из полноэкранного режима

  1. какой ключ вы хотите: выберите RSA (только знак), набрав 4 и ударил Enter
  2. размер ключа: тип 4096 и ударил Enter
  3. как долго ключ должен быть действителен: рекомендуется 2y или же 3y

Ответь на вопросы:

  1. Настоящее имя: ваше имя или ваше имя пользователя Github.
  2. Адрес электронной почты: подтвержденный адрес электронной почты для вашей учетной записи github.
    • Специфично для Github: вы также можете использовать электронную почту без ответа вашей учетной записи Github: в настройки электронной почты реветь Keep my email addresses private флажок должен быть электронным письмом без ответа, например @users.noreply.github.com
  3. Предполагая, что все в порядке, введите O подтвердить
  4. Введите парольную фразу: выберите безопасную парольную фразу
    • личная рекомендация: создайте парольную фразу из 12 к 16 символы, содержащие хотя бы один специальный символ ($, #, @, ...)


Проверьте ключ GPG

echo 'hi!' | gpg --clear-sign > test.txt
gpg --verify test.txt
Войти в полноэкранный режим

Выйти из полноэкранного режима

Он должен сказать что-то вроде: Good signature from "USERNAME (Test Key) <example@email.com>"


Получить идентификатор ключа GPG

gpg --list-secret-keys --keyid-format=long
# or
gpg -K --keyid-format=short

# Output:

sec   rsa4096/A537823F 2022-09-02 [SC] [expires: 2023-09-02]
    E98E6B0663442DE0463E2A880FE0F073A537823F
uid         [ultimate] USERNAME (Test Key) <example@email.com>
Войти в полноэкранный режим

Выйти из полноэкранного режима

В этом случае идентификатор ключа A537823F (из rsa4096/A537823F)


Добавить ключ GPG на Github

  • Получить открытый ключ

    gpg --armor --export A537823F
    
    # generated key
    # -----BEGIN PGP PUBLIC KEY BLOCK-----
    # ....
    # -----END PGP PUBLIC KEY BLOCK-----
    
  • Скопируйте сгенерированный ключ

  • Перейти к Ключи SSH и GPG на github или же Добавить новый ключ GPG на github

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

  • Нажмите Add GPG key


Настройте Git для использования ключа GPG

С идентификатором ключа A537823F

  • Добавить ключ подписи

    git config --global user.signingkey A537823F
    
  • Включить знак для всех коммитов и тегов

    git config --global commit.gpgSign true
    git config --global tag.gpgSign true
    
  • Укажите свое имя и адрес электронной почты

    git config --global user.name USERNAME
    git config --global user.email example@email.com
    


Конфигурация агента GPG


Использование ключей SSH для подписи коммитов

Если у вас еще нет ключа ssh, проверьте:

Не забывайте установить тип ключа на Signing key

Если он у вас есть, то:


Настройте git для использования ssh

git config --global gpg.format ssh
Войти в полноэкранный режим

Выйти из полноэкранного режима


Скопируйте свой публичный ssh-ключ

cat ~/.ssh/id_ed25519.pub
Войти в полноэкранный режим

Выйти из полноэкранного режима


Установите ключ подписи на ваш открытый ключ ssh (замените текст внутри кавычек)

# Beware of the quotes
git config --global user.signingkey 'ssh-ed25519 AAAAC3(...) example@email.com'
Войти в полноэкранный режим

Выйти из полноэкранного режима


Добавьте свой публичный ключ ssh в ~/.config/git/allowed_signers

example@email.com ssh-ed25519 ssh-ed25519 AAAAC3(...) example@email.com example@email.com
Войти в полноэкранный режим

Выйти из полноэкранного режима


Сообщите Git об этом файле

git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
Войти в полноэкранный режим

Выйти из полноэкранного режима


Проверьте подписанный коммит

git commit -m "Some message"

# Verify the commit

git verify-commit 488a8d82 # get the hash with git log
# Or 
git log --show-signature
Войти в полноэкранный режим

Выйти из полноэкранного режима


Ресурсы