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 在 身份验证 中
每月 393次下载
180KB
4.5K SLoC
git-credential-keepassxc
git-credential-keepassxc
是一个 Git凭证 辅助工具,允许Git(和shell脚本)从/to KeePassXC 获取/存储登录信息。
它通过 keepassxc-protocol 与KeePassXC通信,该协议最初是为浏览器扩展设计的。
如何安装
快速
- 通过 Rust 编译器通过 rustup 或您喜欢的包管理器进行安装
- 运行
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>]
创建的组的名称。
注意:如果您有多个数据库,建议使用相同的组名,因为此选项使用所有组名来过滤所有结果。
按高级字符串字段
- 在 KeePassXC 中,转到工具 -> 设置 -> 浏览器集成 -> 高级,启用
Return advanced string fields which start with "KPH: "
(默认启用) - 打开您想要隐藏的条目
- 转到高级
- 添加一个额外的属性
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
请求)
响应格式相同。或者,可以使用 get
、totp
和 generate-password
响应,并通过 --json
标志以 JSON 格式进行格式化;get
和 totp
也支持 --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