簡體   English   中英

自定義 Git 憑證幫助程序

[英]Custom Git Credential Helper

我在沙盒環境中運行git 這意味着git無法看到ssh-agent或他們的系統鑰匙串來獲取憑據。 現在我想使用憑證 api 2編寫一個自定義憑證助手1 ,我可以將它與我的可執行文件捆綁在一起並使用它自己的憑證鑰匙串。

不過,似乎只能使用.gitconfig為每個 URL 靜態配置憑證助手。

有沒有辦法告訴git push/pull/fetch通過在命令行上傳遞自定義助手來使用自定義助手,或者以其他方式提供自定義憑據?


1 https://git-scm.com/docs/gitcredentials
2 https://git-scm.com/docs/api-credentials

您可以在使用-c選項調用git時傳遞自定義配置參數:

git -c credential.helper=foo push origin master

更重要的是,您可能不需要幫助程序,因為您還可以配置憑據幫助程序從環境中讀取(在本例中為變量USERNAMEPASSWORD ):

git \
  -c credential.helper="!f(){ printf 'username=%s\npassword=%s\n' "$USERNAME" "$PASSWORD" };f" \
  push origin master

當然,您可能會發現自定義憑證助手比調用 shell 更整潔或更高效,這很好。

更重要的是,您可能不需要助手,因為您還可以配置憑證助手以從環境中讀取

gitcredentials custom helpers 中記錄了另一種方法

但是(在 Git 2.27,2020 年第二季度)憑證文檔中的示例已更新,以通過根據需要添加適當的引號來清楚地說明我們描述了.git/config文件中將出現的內容。

請參閱Jeff King ( peff ) 的commit 177681acommit dbe80f9 (2020 年 5 月 1 日
(由Junio C gitster -- gitster --commit 1260f81 中合並,2020 年 5 月 8 日)

gitcredentials(7) :使 shell-snippet 示例更加真實

簽字人:Jeff King

有一個使用自己的 shell 作為憑證​​助手的示例,但這不是很現實:

  • 將您的秘密密碼分發給_every _ 主機是愚蠢的。
    在現實世界中,您將使用 config-matcher 將其限制為特定主機。

  • 我們從未提供用戶名。
    我們可以在另一個配置選項中輕松地做到這一點(你也可以在幫助器中做到這一點,但這更具可讀性)。

  • 我們甚至為存儲/擦除操作發送了秘密。
    這是可以的,因為 Git 會忽略它,但真正的系統可能會解鎖密碼存儲,您不會想要做更多必要的事情。

所以,而不是:

[credential]
    helper = "!f() { echo \"password=$(cat $HOME/.secret)\"; }; f"

你會看見:

[credential "https://example.com"]
    username = your_user
    helper = "!f() { test \"$1\" = get && echo \"password=$(cat $HOME/.secret)\"; }; f"

Git 2.27(2020 年第二季度)添加了文檔更新。

請參閱Brian m 的提交 4153274 (2020 年 5 月 5 日) 卡爾森 ( bk2204 )
(由Junio C gitster -- gitster --commit 37b48f0 中合並,2020 年 5 月 8 日)

docs :文檔credential.helper允許的值

簽字人:brian m. 卡爾森
確認者:傑夫·金

gitcredentials(7) 已經提到了幾種可能的調用,可以將它們用作credential.helper的值。

但是,許多人不知道除了簡單的憑證幫助程序名稱之外還有其他選項,因此讓我們在文檔中也放置一些有關 credential.helper 的解釋性文本。

我們仍然向用戶推薦 gitcredential(7) 以獲取更多解釋和有用的示例。

git credential文檔現在包括:

憑證助手:

指定需要用戶名或密碼憑據時要調用的外部助手; 助手可以咨詢外部存儲以避免提示用戶輸入憑據。

這通常是帶有可能參數的憑證助手的名稱,但也可能是帶有參數的絕對路徑,或者如果前面有! , shell 命令。

和:

在 Git 2.27(2020 年第二季度)中,圍繞憑證 API 有少量代碼內注釋和文檔更新。

提交1aed817提交4b8938b (2020年5月6日),並提交bb98765提交7f53583通過(2020年5月5日)卡羅馬塞洛阿里納斯貝隆( carenas
(由Junio C gitster合並-- gitster -- in commit aa28171 ,2020 年 5 月 13 日)

credential :記錄協議更新

簽約人:卡洛·馬塞洛·阿里納斯·貝隆

CVE-2020-11008 之后的文檔協議更改,包括刪除對屬性覆蓋的引用,在 CVE-2020-5260 之后不再推薦並且將來可能會刪除。

credential : 更新credential_from_url_gently描述

審核人:傑夫·金
簽約人:卡洛·馬塞洛·阿里納斯·貝隆

c44088ecc4 (“ credential :將沒有方案的 URL 視為無效”,2020 年 4 月 18 日,Git v2.27.0-rc0 -- 合並第 3 批中列出)將此函數的實現更改為如果缺少協議則返回 -1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM