Пришло время убить свой агент GPG — Подписание кода Git SSH

На прошлой неделе GitHub наконец-то выпустил SSH-подпись кода. Git ввел подписание с помощью SSH-ключа почти год назад. Технически вы могли использовать SSH-подпись кода и раньше, но GitHub просто показывал страшный значок «Unverified badge».

Преимущества подписи кода

Если вы участвуете в крупных проектах с открытым исходным кодом, большинство из них требуют подписывать код. Почему?

В Git’е можно выдать себя за кого угодно. Например:

git -c user.name='Linus Torvalds' -c user.email='torvalds@linux-foundation.org' commit -m "hi"
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь, если вы зафиксируете что-то на GitHub, это будет отображаться как то, что зафиксировал Linux Torvalds. Ознакомьтесь с этой статьей для получения дополнительной информации по этой теме. Почему это не опасно? Из-за подписи кода, если вы подписываете свой код, другие могут быть на 100% уверены, что это сделали вы.

Почему SSH вместо GPG?

На мой взгляд, есть несколько обоснованных причин.

  1. В Windows GPG подписывает код ужасно, вы можете найти бесчисленное количество тем на StackOverflow об ошибках и багах. Мой агент GPG любит умирать по крайней мере раз в неделю. Тогда мне приходится убивать агента, перезапускать его, снова пытаться выполнить подпись, она все еще не работает, снова перезапускать его и, наконец, она работает. Это ОЧЕНЬ раздражает.

  2. Вы можете использовать один и тот же SSH-ключ для аутентификации и подписи, поэтому вам не придется иметь дело с двумя отдельными ключами.

Настройка

Эти команды должны работать на Windows, Linux и macOS, если вы используете Git Bash (если у вас проблемы с ~ на Windows, используйте относительные пути).

Давайте сгенерируем новый ключ (вы можете использовать существующие SSH-ключи):

ssh-keygen -t ed25519 -C "email@example.com"
Войдите в полноэкранный режим Выйти из полноэкранного режима

Вы можете выбрать место сохранения файла и имя файла, я рекомендую использовать значения по умолчанию. Также вам будет предложено ввести пароль. Если вы приняли параметры по умолчанию, ваш ключ должен находиться в ~/.ssh. Теперь добавьте ваш новый ключ в ssh-агент.

ssh-add ~/.ssh/id_ed25519
Вход в полноэкранный режим Выйдите из полноэкранного режима

Если вы видите ошибку, возможно, ваш ssh-агент не запущен, запустите его:

eval "$(ssh-agent -s)"
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь давайте настроим интеграцию с Git.

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

Теперь скопируйте содержимое файла открытого ключа ~/.ssh/id_ed25519.pub.

git config --global user.signingkey 'ssh-ed25519 AAAAC3... email@example.com'
Войдите в полноэкранный режим Выход из полноэкранного режима

Загрузка ключа на GitHub

Теперь перейдите к настройкам GitHub. Нажмите кнопку Добавить новый SSH-ключ. Убедитесь, что вы выбрали ключ подписи. И вставьте содержимое файла открытого ключа.

Теперь сделайте коммит в репозиторий, нажмите на коммит, и вы увидите красивый значок верификации. Вы можете проверить отпечаток пальца:

ssh-keygen -lf ~/.ssh/id_ed25519.pub
Войти в полноэкранный режим Выйти из полноэкранного режима

Отзыв старого ключа GPG

Если вы хотите, вы можете легко отозвать свой старый GPG.

Перечислите ваши текущие ключи:

gpg --list-keys
Войти в полноэкранный режим Выйти из полноэкранного режима

В первой строке вам нужен идентификатор вашего открытого ключа, что-то вроде: ABCD1234, затем отзовите свой ключ:

gpg --output revoke.asc --gen-revoke key 
Войти в полноэкранный режим Выйдите из полноэкранного режима

Затем импортируйте сохраненный вами сертификат отзыва:

gpg --import revoke.asc
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы успешно отозвали свой ключ в связке ключей, теперь вам нужно удалить тот же GPG ключ в вашем аккаунте GitHub и загрузить его снова. Если вы всё сделали правильно, посмотрите на старый коммит, и вы увидите оранжевый значок «Revoked».

Оцените статью
devanswers.ru
Добавить комментарий