Подпись 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.

Поделиться: DiasporaTwitterFacebookLinkedInHackerNewsEmailReddit

Похожие записи:


Comments !