W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
如果你使用的是 SSH 方式連接遠(yuǎn)端,并且設(shè)置了一個沒有口令的密鑰,這樣就可以在不輸入用戶名和密碼的情況下安全地傳輸數(shù)據(jù)。 然而,這對 HTTP 協(xié)議來說是不可能的 —— 每一個連接都是需要用戶名和密碼的。 這在使用雙重認(rèn)證的情況下會更麻煩,因?yàn)槟阈枰斎胍粋€隨機(jī)生成并且毫無規(guī)律的 token 作為密碼。
幸運(yùn)的是,Git 擁有一個憑證系統(tǒng)來處理這個事情。 下面有一些 Git 的選項(xiàng):
默認(rèn)所有都不緩存。 每一次連接都會詢問你的用戶名和密碼。
“cache” 模式會將憑證存放在內(nèi)存中一段時間。 密碼永遠(yuǎn)不會被存儲在磁盤中,并且在15分鐘后從內(nèi)存中清除。
“store” 模式會將憑證用明文的形式存放在磁盤中,并且永不過期。 這意味著除非你修改了你在 Git 服務(wù)器上的密碼,否則你永遠(yuǎn)不需要再次輸入你的憑證信息。 這種方式的缺點(diǎn)是你的密碼是用明文的方式存放在你的 home 目錄下。
如果你使用的是 Mac,Git 還有一種 “osxkeychain” 模式,它會將憑證緩存到你系統(tǒng)用戶的鑰匙串中。 這種方式將憑證存放在磁盤中,并且永不過期,但是是被加密的,這種加密方式與存放 HTTPS 憑證以及 Safari 的自動填寫是相同的。
你可以設(shè)置 Git 的配置來選擇上述的一種方式
$ git config --global credential.helper cache
部分輔助工具有一些選項(xiàng)。 “store” 模式可以接受一個?--file <path>
?參數(shù),可以自定義存放密碼的文件路徑(默認(rèn)是~/.git-credentials
)。 “cache” 模式有?--timeout <seconds>
?參數(shù),可以設(shè)置后臺進(jìn)程的存活時間(默認(rèn)是 “900”,也就是 15 分鐘)。 下面是一個配置 “store” 模式自定義路徑的例子:
$ git config --global credential.helper store --file ~/.my-credentials
Git 甚至允許你配置多個輔助工具。 當(dāng)查找特定服務(wù)器的憑證時,Git 會按順序查詢,并且在找到第一個回答時停止查詢。 當(dāng)保存憑證時,Git 會將用戶名和密碼發(fā)送給?所有?配置列表中的輔助工具,它們會按自己的方式處理用戶名和密碼。 如果你在閃存上有一個憑證文件,但又希望在該閃存被拔出的情況下使用內(nèi)存緩存來保存用戶名密碼,.gitconfig
?配置文件如下:
[credential]
helper = store --file /mnt/thumbdrive/.git-credentials
helper = cache --timeout 30000
這些是如何實(shí)現(xiàn)的呢? Git 憑證輔助工具系統(tǒng)的命令是?git credential
,這個命令接收一個參數(shù),并通過標(biāo)準(zhǔn)輸入獲取更多的參數(shù)。
舉一個例子更容易理解。 我們假設(shè)已經(jīng)配置好一個憑證輔助工具,這個輔助工具保存了?mygithost
的憑證信息。 下面是一個使用 “fill” 命令的會話,當(dāng) Git 嘗試尋找一個服務(wù)器的憑證時就會被調(diào)用。
$ git credential fill
protocol=https
host=mygithost
protocol=https
host=mygithost
username=bob
password=s3cre7
$ git credential fill
protocol=https
host=unknownhost
Username for 'https://unknownhost': bob
Password for 'https://bob@unknownhost':
protocol=https
host=unknownhost
username=bob
password=s3cre7
Git-credential 接下來會等待標(biāo)準(zhǔn)輸入。 我們提供我們所知道的信息:協(xié)議和主機(jī)名。
一個空行代表輸入已經(jīng)完成,憑證系統(tǒng)應(yīng)該輸出它所知道的信息。
接下來由 Git-credential 接管,并且將找到的信息打印到標(biāo)準(zhǔn)輸出。
這個程序只有在接受到?
get
?行為的請求并且后端存儲的文件存在時才會有輸出。
這個循環(huán)從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),直到讀取到第一個空行。 輸入的數(shù)據(jù)被保存到?
known
?哈希表中,之后需要用到。
這個循環(huán)讀取存儲文件中的內(nèi)容,尋找匹配的行。 如果?
known
?中的協(xié)議和主機(jī)名與該行相匹配,這個程序輸出結(jié)果并退出。
我們把這個輔助工具保存為?git-credential-read-only
,放到我們的?PATH
?路徑下并且給予執(zhí)行權(quán)限。 一個交互式會話類似:
$ git credential-read-only --file=/mnt/shared/creds get
protocol=https
host=mygithost
protocol=https
host=mygithost
username=bob
password=s3cre7
由于這個的名字是 “git-” 開頭,所以我們可以在配置值中使用簡便的語法:
$ git config --global credential.helper read-only --file /mnt/shared/creds
正如你看到的,擴(kuò)展這個系統(tǒng)是相當(dāng)簡單的,并且可以為你和你的團(tuán)隊(duì)解決一些常見問題。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: