Подпись git коммитов ssh ключом
Мы уже рассматривали зачем нужна подпись коммитов в одном из предыдущих постов.
Теперь же в git можно производить подпись коммитов и с помощью ssh ключа, чтоб не использовать gpg ключ, если он вам не нужен. Это отличная возможность, т.к. большинство людей используют SSH для доступа к репозиториям.
Подпись ключом
Для начала необходимо настроить git:
$ git config --global commit.gpgsign true
$ git config --global gpg.format ssh
Теперь скажем git какой из ключей необходимо использовать для подписи. Получить список ваших ключей можно с помощью команды:
$ ssh-add -L
Указываем ключ:
$ git config --global user.signingkey "ssh-ed25519 <your key id>"
Например:
$ git config --global user.signingkey "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM9V5SC0UdggJItk8StyYrJTj4eSArjuz4kgqXRy8hnfExample"
Для проверки запустите команду в любом из ваших репозиториев:
$ git commit --allow-empty --message="Testing SSH signing"
Вы должны увидеть нечто типа [main 02f6137] Testing SSH signing
если все было проделано верно.
Проверка подписей
Давайте проверим, что покажет проверка только что созданного коммита:
$ git show --show-signature
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification
commit 52b2c062225a77eea1e142c4073b7b0907eeef5c
No signature
Author: Silver Ghost <[email protected]>
Date: Mon Nov 15 16:28:46 2021 -0600
Testing SSH signing
Как вы можете заметить, то git нам выдает No signature
, хотя мы и сделали подпись коммита. Без паники. Все нормально. Немного выше написано, что нам необходимо сконфигурировать файл и доверенными подписями.
$ git config --global gpg.ssh.allowedSignersFile ~/.ssh/allowed_signers
$ touch ~/.ssh/allowed_signers
Проверяем
$ git show --show-signature
commit 52b2c062225a77eea1e142c4073b7b0907eeef5c
Good "git" signature with ED25519 key SHA256:l1J5VwpF7tSJ0SE9/iawdFhwR7BdzPPxdV3jIURg/yo
sig_find_principals: sshsig_get_principal: key not found^M
No principal matched.
Author: Silver Ghost <[email protected]>
Date: Mon Nov 15 16:28:46 2021 -0600
Testing SSH signing
Теперь мы видим, что подпись проверена и является валидной, но...Ключ не сматчился. Это потому, что созданный файл у нас пуст.
echo "[email protected] ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM9V5SC0UdggJItk8StyYrJTj4eSArjuz4kgqXRy8hnfExample" > ~/.ssh/authorized_signatures
Формат этого файла следующий:
<email>[,<email>...] <key type> <public key>
Если запустить проверку еще раз, то все будет хорошо:
commit 52b2c062225a77eea1e142c4073b7b0907eeef5c
Good "git" signature for dmitriy@lyalyuev.info with ED25519 key SHA256:l1J5VwpF7tSJ0SE9/iawdFhwR7BdzPPxdV3jIURg/yo
Author: Silver Ghost <dmitriy@lyalyuev.info>
Date: Mon Nov 15 16:28:46 2021 -0600
Testing SSH signing
.gitconfig
В итоге вот такие изменения были внесены в .gitconfig
:
[gpg]
format = ssh
[gpg "ssh"]
allowedSignersFile = ~/.ssh/allowed_signers
[user]
signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM9V5SC0UdggJItk8StyYrJTj4eSArjuz4kgqXRy8hnfExample
GitHub
Для того, чтоб GitHub стал проверять подпись и вывешивать плашку Verified
вам осталось загрузить ваш публичный ключ как Signing key
.
Комментарии: