#git-commit #ssh-key #git #signing #fido #ssh

应用 gfh

Git FIDO辅助工具 - 使用多个FIDO密钥对Git提交进行签名

4个版本

0.0.4 2022年12月3日
0.0.3 2022年11月13日
0.0.2 2022年11月13日
0.0.1 2022年11月13日

#2145 in 开发工具

MIT许可证

22KB
261

gfh

Git FIDO辅助工具,或者上帝保佑我。

gfh是一个帮助您使用存储在多个FIDO设备上的SSH密钥在Git中签名的工具。

入门 - 使用方法 - 安装

注意:目前此项目仅与YubiKey 5C NFC进行了测试。任何FIDO2认证设备都应该是兼容的,但如果您在使用特定设备时遇到任何问题,或者它运行良好,请告诉我,这样我可以有一个所有已验证工作密钥的运行列表。

入门

在开始使用gfh之前,您需要确保您已经在FIDO密钥(们)上有一个驻留SSH密钥。最简单的方法是使用ssh-keygen -t ed25519-sk -O resident,但如果您需要不同的东西,网上有更好的指南。

如果您没有多个FIDO密钥/只使用一个驻留SSH密钥,那么您很可能不需要使用gfh。由于Git不支持多个signingkey,这个工具的使用场景非常有限。如果您只使用一个驻留SSH密钥进行签名,您可以直接使用该配置选项,无需gfh。

注意事项

我只亲自验证了gfh在macOS上可以工作,我的有些朋友在Windows(10 & 11)上运行良好,但我自己没有成功。...

在Linux上,gfh似乎会因warning: gpg.ssh.defaultKeyCommand succeeded but returned no keys: key::...而失败,这显然是没有意义的,因为它期望的格式显然是存在的。我的一个朋友说,运行eval `ssh-agent`(或者Fish的等价物eval (ssh-agent -c))解决了他们的问题,但我自己没有成功,所以YMMV。

如果您发现这些问题的有效解决方案,请告诉我,我会尝试看看是否能重现这些问题。

使用方法

将您的密钥添加到gfh的最简单方法是使用gfh -a。这将提示您选择要使用的FIDO密钥,以及与其一起使用的公钥(或私钥)的路径(这必须是您为该特定FIDO设备生成的本地密钥)。

如果您愿意,可以手动编辑配置,通过在~/.config/gfh/keys创建文件以以下格式

serial::~/.ssh/id_ed25519_sk
serial::~/.ssh/id_ecdsa_sk

(空行和以#开头的行将被忽略,但使用gfh -a时不会被保留)

将密钥导入gfh后,运行以下命令以设置与Git的SSH签名

git config --global commit.gpgsign true
git config --global tag.gpgsign true
git config --global gpg.format "ssh"
git config --global gpg.ssh.program "gfh-keygen"
git config --global gpg.ssh.defaultKeyCommand "gfh"

如果您使用的是Windows,将最后两个命令更改为设置gfh-keygen.exegfh.exe

(您不需要设置user.signingkey,因为gfh会自动为您处理。)

如果一切顺利,您应该能够在插入FIDO密钥的情况下创建新的提交或标签,Git将正确提示您使用它进行签名。

安装

当前发布版本正在等待固定的CI构建,同时您可以通过Cargo正常安装。

gfh的静态二进制构建可在我们的发布页面上获取,适用于Windows(x86)、Mac(ARM & x86)和Linux(各种架构)。

Homebrew

brewinstall ovyerus/tap/gfh

Scoop

scoop bucket add ovyerus https://github.com/Ovyerus/bucket
scoop install gfh

Crate

cargoinstall gfh

从源代码

拉取此存储库并运行cargo build --release,然后在./target/release/中查找gfhgfh-keygen二进制文件。

从源代码或从Cargo构建时,在Linux上您还需要以下软件包:pkg-config libpcsclite-dev libudev-dev

许可证

此程序受MIT许可证的许可(请参阅LICENSEhttps://opensource.org/licenses/MIT)。

依赖关系

~21–34MB
~563K SLoC