記錄一下配置git操作遠程倉庫時的自動驗證,效果如下圖:

本文介紹的是Linux下的配置,Windows上默認已經啟用憑證存盤和自動驗證(依靠wincred實作,以后會使用GCM-Core),
準備作業
首先需要Linux系統上安裝了dbus或者是gnome-keyring(依賴于dbus),如果可能的話需要安裝libsecret,這是一個更現代的用于憑證管理的庫,因為我們需要借助dbus的service才行實作憑證存盤:
# Ubuntu
sudo apt-get install libsecret-1-0 libsecret-1-dev gnome-keyring
# Arch Linux
sudo pacman -S libsecret gnome-keyring
其次你需要git 2.11+,一次make,pkg-config,gcc等編譯工具,可以用下面的命令安裝:
# Ubuntu
sudo apt install build-essential git pkg-config
# Arch Linux
sudo pacman pkg-config make gcc g++ git
最后,我們需要獲取個人的ACCESS TOKEN,因為GitHub在2021年底將會廢除git操作時的密碼驗證,所有密碼驗證需要轉換為TOKEN驗證,密碼只能用于賬戶本身的登錄,
首先我們要進設定界面,先打開github.com,然后跟著圖里的步驟走:

然后點紅圈里的開發者設定:

你會看到這樣的界面,上面列出了已經創建的token和創建/洗掉按鈕:

下面是如何創建token,這里建議只勾選你需要的權限,比如提交commit等,權限不是越多越好:


創建完成后會把token明文顯示給你,一定要妥善保存,因為頁面一旦關閉/重繪這串token就只有你一個人知道了:

一旦token遺失或者沒用了,就要及時洗掉,比如我剛剛為了演示而創建的token演示結束就沒用了,所以要洗掉:


有了access token,下面就可以配置自動登錄驗證了,
什么是憑證存盤
就是字面意思,用某種方式把密碼或者token存盤起來,在需要的時候可以獲取這些被存盤的憑證,
git內置了對憑證存盤的支持,通過配置進行:
git config --global credential.helper xxx
如果沒有設定那么默認不進行存盤,這個xxx默認有2個選項:
- store 把憑證用明文存盤在$HOME目錄下,為了安全建議不要設定它
- cache 把憑證存盤在記憶體里15分鐘,15分鐘后洗掉
除此之外還支持符合介面規范的第三方應用程式:
git config --global credential.helper your-tool
git config --global credential.helper /path/to/your-tool
對于第一種形式,git會去$PATH里找名字叫git-credential-your-tool的程式,在設定的時候不用寫出前綴,第二種會直接呼叫絕對路徑指定的程式,
選用第三方工具是理由是安全:這些工具通常會加密你的憑證,并且存盤在一個不容易導致惡意訪問的地方,另外還可以和系統功能集成,
那么從哪找這么好的第三方管理程式呢?別著急,git自帶了,
在Ubuntu系統上,git把這些程式的原始碼存盤在:/usr/share/doc/git/contrib/credential/這里,在Arch Linux上則是/usr/share/git/credential:

上圖是Arch Linux上的情況,gnome-keyring和libsecret、netrc是Linux上可以使用的工具,
因為都是原始碼,所以我們得先進行編譯,
配置
我們選擇libsecret,因為gnome-keyring未來會被廢棄,
采用下面的命令編譯,以Ubuntu為例子:
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
# 如果目錄所在的檔案系統是ext4,xfs,btrfs,還可以用下面的命令禁止對程式的任何修改
sudo chattr +i git-credential-libsecret
你可以把該目錄添加進$PATH,然后指定credential.helper:
echo '$PATH=$PATH:/usr/share/doc/git/contrib/credential/libsecret' >> ~/.bashrc
git config --global credential.helper libsecret
或者你不想修改$PATH,可以這樣配置:
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
這樣就大功告成了,
運行
為了測驗,我們隨便選擇一個自己的專案,先clone到本地,然后做些修改后commit,
只有在修改遠程倉庫的時候才會進行憑證驗證,比如push,通常的程序是這樣的:
$ git push origin dev
Username for 'https://github.com': apocelipes
Password for 'https:/[email protected]':
雖然提示的文字仍然使用的密碼,但輸入的應該是我們之前創建的access token,
驗證通過后就會把變更push到origin,但配置自動驗證后第一次仍然需要輸入憑證,然后現在會是這樣:

需要為你的密鑰環配置一個單獨的密碼,你也可以選擇用戶的默認密碼,配置完成后憑證就會被安全地存盤了,
下次push將不會再驗證用戶名和憑證,效果和文章開頭的圖片里一樣,
這樣自動登錄認證就配置完成了,
參考
https://git-scm.com/book/zh/v2/Git-工具-憑證存盤
https://stackoverflow.com/questions/36585496/error-when-using-git-credential-helper-with-gnome-keyring-as-sudo/40312117#40312117
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/266960.html
標籤:其他
