(Правильное) сообщение git’у о вашем SSH-ключе для подписания коммитов

GitHub недавно добавил функцию поддержки проверки коммитов по SSH, что, на мой взгляд, должно быть проще, чем использование GPG. (Git выпустил подписание с помощью SSH-ключа начиная с версии 2.34.)

После генерации пары SSH-ключей (о которой вы можете узнать здесь), вам нужно сообщить о ней git’у. И сделать это можно через user.signingkey git config.

Хороший

Однако по некоторым причинам почти все учебники и инструкции в сети говорят, что вам нужно скопировать и вставить буквальный открытый ключ в качестве значения git config, как это сделано здесь:

// NOT 100% correct example, explanation below
$ git config --global user.signingkey 'ssh-ed25519 AAAAC3(...)'
Войти в полноэкранный режим Выйти из полноэкранного режима

Лучше

Хотя это вроде бы работает (на самом деле только с нефизическими ключами), я обнаружил, что вы также можете указать путь к файлу открытого ключа следующим образом, что может быть лучше в некоторых отношениях:

git config --global user.signingkey ~/.ssh/id_ed25519.pub
Войти в полноэкранный режим Выход из полноэкранного режима

В то же время я обнаружил, что «правильный» способ указать буквальное значение открытого ключа — это префикс key::, как показано ниже:

git config --global user.signingkey "key::ssh-ed25519 (...)"
Войти в полноэкранный режим Выйти из полноэкранного режима

Я узнал об этом из архива списка рассылки git: https://lore.kernel.org/git/20220628162342.ootjobbjtxg7b7ay@fs/t/.

Физические ключи безопасности

Все устройства FIDO2 (не только более сложные YubiKeys, которые могут делать резидентные/обнаруживаемые ключи) должны уметь генерировать SSH ключи, начиная с OpenSSH 8.2. Поэтому я хотел использовать свои физические ключи безопасности с помощью этого устройства, и тут я получил эту ошибку:

Couldn't load public key sk-ssh-ed25519@openssh.com AAAA(...)
: No such file or directory?
Войдите в полноэкранный режим Выход из полноэкранного режима

Тогда мне пришлось поискать и выяснить, что для пары ключей SSH, сгенерированных из физического ключа безопасности, который имеет префикс sk-ssh в литеральной строке открытого ключа или суффикс _sk в имени файла ключа, требуется префикс key:: для литерального значения открытого ключа git config:

git config --global user.signingkey "key::sk-ssh-ed25519@openssh.com AAAA(...)"
Войти в полноэкранный режим Выйти из полноэкранного режима

Путь к файлу проще

Итак, в заключение, использование пути к файлу для этого конфига проще во многих отношениях и предотвратит ошибку отсутствия префикса (No such file or directory?) в корне конфига.

Несколько строк для копирования и вставки

Наконец, в качестве бонусного контента, вот несколько строк для вашего удобства 😆

Конфиг Git для использования SSH для подписи:

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

Включить по умолчанию подписание коммитов и тегов соответственно:

git config --global commit.gpgsign true
git config --global tag.gpgsign true
Войти в полноэкранный режим Выйти из полноэкранного режима

Установите user.signingkey в pub-ключ, сгенерированный из физического ключа безопасности:

git config --global user.signingkey ~/.ssh/id_ed25519_sk.pub

// or for an ECDSA key
git config --global user.signingkey ~/.ssh/id_ecdsa_sk.pub
Войти в полноэкранный режим Выйти из полноэкранного режима

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

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

Обратите внимание, что все показанные --global опции git config являются необязательными, поскольку это то, что вы, скорее всего, хотите, однако вы можете установить все эти опции в качестве локальных настроек.

Также обратите внимание, что хотя я не знаю, есть ли разница в других ОС, это тестировалось только на macOS 12.3.

Наслаждайтесь подписанием коммитов с помощью ключа SSH! 🎉

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