#git #keepass #git-config #命令行 #keepassxc

应用程序 git-credential-keepassxc

辅助工具,允许Git和shell脚本使用KeePassXC作为凭证存储

30次发布

新版本 0.14.1 2024年8月12日
0.14.0 2023年10月24日
0.13.0 2023年6月2日
0.12.0 2023年1月29日
0.3.3 2020年7月20日

#29身份验证

Download history 1/week @ 2024-04-26 1/week @ 2024-05-17 2/week @ 2024-06-07 3/week @ 2024-06-14 3/week @ 2024-07-05 254/week @ 2024-07-26 22/week @ 2024-08-02 117/week @ 2024-08-09

每月 393次下载

GPL-3.0或更新版

180KB
4.5K SLoC

git-credential-keepassxc

GitHub Actions Status License: GPL v3 crates.io version

git-credential-keepassxc 是一个 Git凭证 辅助工具,允许Git(和shell脚本)从/to KeePassXC 获取/存储登录信息。

它通过 keepassxc-protocol 与KeePassXC通信,该协议最初是为浏览器扩展设计的。

如何安装

快速

  1. 通过 Rust 编译器通过 rustup 或您喜欢的包管理器进行安装
  2. 运行 cargo install --locked git-credential-keepassxc 并将其安装到 Cargo安装根目录

预构建的二进制文件(实验性)

GitHub发布页面 提供实验性预构建的二进制文件。

*-minimal 是不带可选功能的构建,而 *-full 是带有所有功能的构建。

可选功能

git-credential-keepassxc 有以下可选功能

功能 描述
all 启用所有功能
notification 桌面通知,如果 git-credential-keepassxc 在脚本中使用,则非常有用
yubikey 允许使用YubiKey HMAC-SHA1加密配置文件
strict-caller 当存在相关数据库时强制执行调用者限制(有关详细信息,请参阅 限制调用者

您可以使用 cargo-update 使功能在更新之间持久化。

# install cargo-update first
$ cargo install --locked cargo-update
# enable and persist features
$ cargo install --locked --features <FEATURE>... git-credential-keepassxc
# note the different order of package name and --feature (singular) flag
$ cargo install-update-config git-credential-keepassxc --enforce-lock --feature <FEATURE>...

# later when you update
$ cargo install-update git-credential-keepassxc

配置

类似于浏览器扩展,git-credential-keepassxc 需要先与KeePassXC关联

# enable browser integration in KeePassXC settings, then
$ git-credential-keepassxc caller me  # only required if compiled with strict-caller, see Limiting callers
$ git-credential-keepassxc configure
$ git config --global --replace-all credential.helper 'keepassxc --git-groups'

将创建一个专用组(默认为 Git)。如果您想使用其他组的凭据,请查阅 过滤结果

有关更多选项,运行 git-credential-keepassxc -h 显示帮助信息。

限制调用者

git-credential-keepassxc 允许您限制程序的调用者

# don't forget to add yourself first
$ git-credential-keepassxc caller me
Gonna save current caller to allowed callers list:
{
  "path": "/usr/bin/zsh",
  "uid": 1000,
  "gid": 1000,
  "canonicalize": false
}
Press Enter to continue...
# then add Git
$ git-credential-keepassxc caller add --uid "$(id -u)" --gid "$(id -g)" "$(command -v git)"
# you may also need to add other executables in /usr/lib/git-core/
# run `git config --global --replace-all credential.helper 'keepassxc -vv --git-groups'` to enable logs if any Git subcommand is blocked

$ sh -c 'printf "url=https://example.com\nusername=foo\n" | git-credential-keepassxc get'
May 10 12:51:56.108 ERRO /usr/bin/bash (uid=1000, gid=1000) is not allowed to call git-credential-keepassxc, Caused by: N/A
$ printf 'url=https://example.com\nusername=foo\n' | git credential fill
May 10 12:52:53.995 WARN Request get-logins failed. Error: No logins found, Error Code: 15
May 10 12:52:53.995 ERRO Request get-logins failed, Caused by: N/A, Message: Request get-logins failed

# disable this function
$ git-credential-keepassxc caller clear

注意:如果您已启用 strict-caller,在配置数据库之前必须添加调用者配置文件,否则之后将无法运行 git-credential-keepassxc

使用 YubiKey 加密 KeePassXC 密钥

默认情况下,身份验证密钥以明文形式存储,如果您允许客户端在不确认的情况下检索任何凭据,这可能会特别危险。

git-credential-keepassxc 可以使用 YubiKey HMAC-SHA1 挑战-响应来加密这些密钥。首先确保您已启用 yubikey 功能,然后

# encrypt using YubiKey slot 2 and a randomly generated challenge
$ git-credential-keepassxc encrypt challenge-response

解密密钥

$ git-credential-keepassxc decrypt

有关更多详细信息,请参阅: wiki/Encryption

过滤结果

按组名

--group <GROUP>。此选项可重复使用。这是组的名称本身。不支持路径。

按专用 Git 组名

--git-groups。这使用由 git-credential-keepassxc configure [--group <GROUP>] 创建的组的名称。

注意:如果您有多个数据库,建议使用相同的组名,因为此选项使用所有组名来过滤所有结果。

按高级字符串字段

  1. 在 KeePassXC 中,转到工具 -> 设置 -> 浏览器集成 -> 高级,启用 Return advanced string fields which start with "KPH: "(默认启用)
  2. 打开您想要隐藏的条目
  3. 转到高级
  4. 添加一个额外的属性 KPH: git(冒号后的空格是必需的),其值是 false

关于 git-credential-keepassxc store 的说明

由于 git-credential-keepassxc store 包括查找现有条目然后更新或创建一个,因此这些过滤器也可以阻止更新某些条目。

这是非常重要的,因为 Git 可能会在验证密码后调用 git-credential-keepassxc store,并且它可能会更新您的登录密码条目而不是 API 令牌条目。

脚本

git-credential-keepassxc 还可以帮助在 shell 脚本中管理凭据。您可以通过标准输入发送请求,然后处理响应。

输入中接受的字段(未知字段将被忽略)

  • url
  • username
  • password(仅限 store 请求)

响应格式相同。或者,可以使用 gettotpgenerate-password 响应,并通过 --json 标志以 JSON 格式进行格式化;gettotp 也支持 --raw 标志。

例如,连接到远程桌面服务

#!/usr/bin/env -S bash -euET -o pipefail -O inherit_errexit

trap 'notify-send "RDP Failure" "Failed to connect to Remote Desktop service"' ERR

HOST="example.com"
PORT="3389"
USERNAME="Administrator"
PASSWORD="$(printf 'url=rdp://%s:%s\nusername=%s\n' "$HOST" "$PORT" "$USERNAME" | git-credential-keepassxc get | sed -n 's/^password=//p')"

xfreerdp /v:"$HOST:$PORT" /cert-tofu /cert:ignore \
    /size:2560x1620 /smart-sizing /scale:140 /scale-desktop:140 /scale-device:140 \
    +compression /compression-level:2 +clipboard +themes +wallpaper \
    /t:Example +decorations /u:"$USERNAME" /p:"$PASSWORD"

故障排除和其他

维基

依赖关系

~8-39MB
~609K SLoC