验证 SSH 提交是否已签名(不验证签名的有效性)

问题描述 投票:0回答:1

是否有快速命令来检查我是否签署了特定提交?

(请注意,我不是问如何验证签名。我只是想知道:提交是否已签名?是或否)

我尝试了以下操作,但他们都告诉我提交是NOT签名的:

 git log --show-signature HEAD -1
 git verify-commit HEAD
 git log --pretty="format:%h (%aN) %G? %GG %GK %GF" HEAD -1

以上所有内容都显示了 GPG 签名的一些东西,但如果提交是使用 SSH 密钥签名的,请告诉我“无签名”。

唯一说出全部真相的命令是

cat-file commit

$ git cat-file commit HEAD
tree 896fba0491baa9f122a2eae5bcd8b052c6481272
parent 97031bccd6744e24028be294059e5a24a454cb58
author [...]
committer [...]
gpgsig -----BEGIN SSH SIGNATURE-----
[...]
 -----END SSH SIGNATURE-----

[...]

正如预期的那样,我签名的提交在 GitHub 上被标记为

Verified

我猜测 SSH 签名检查的支持不如 GPG 签名检查。我什至可以想象为什么更多具有安全意识的 git 维护者可能不喜欢 SSH 签名支持。

但我最初的实际问题仍然存在。 有没有比

cat-file
更方便的方法来验证我签署了提交?

git ssh digital-signature
1个回答
0
投票

您走在正确的道路上。

  • git show
    将显示提交是否已签名

  • 这是一个演示,我认为它与您所做的类似,您将看到提交已签名

#!/bin/bash

# Prepare repo
cd        /tmp
rm -rf    /tmp/local-repo
git init  /tmp/local-repo

# Switch to the new repo
cd /tmp/local-repo

# Set up local repository flags fo sign
git config user.name   "user"
git config user.email  "email"
git config gpg.format  ssh
git config user.signingkey ~/.ssh/id_rsa.pub

# Add some dummy content
echo a > a.txt 

# Commit the changes
git add .
git commit -s -m "Initial commit"

echo -e ""
echo -e "----------------------------------------------------------------"
echo -e ""
echo -e "$ git verify-commit HEAD"
git verify-commit HEAD

echo -e ""
echo -e "----------------------------------------------------------------"
echo -e ""
echo -e "$ git show HEAD"
git show HEAD

输出

Initialized empty Git repository in /private/tmp/local-repo/.git/
[main (root-commit) 623ab49] Initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

----------------------------------------------------------------

$ git verify-commit HEAD

----------------------------------------------------------------

$ git show HEAD
commit 623ab49b6fe911960494006ee0b80a7cd982b6a2 (HEAD -> main)
Author: user <email>
Date:   Sat Apr 27 01:21:12 2024 +0300

    Initial commit
    
    Signed-off-by: user <email>

diff --git a/a.txt b/a.txt
new file mode 100644
index 0000000..7898192
--- /dev/null
+++ b/a.txt
@@ -0,0 +1 @@
+a
© www.soinside.com 2019 - 2024. All rights reserved.