記錄一下配置git操做遠程倉庫時的自動驗證,效果以下圖:git
本文介紹的是Linux下的配置。Windows上默認已經啓用憑證存儲和自動驗證(依靠wincred實現,之後會使用GCM-Core)。github
首先須要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等編譯工具,能夠用下面的命令安裝:bash
# 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,而後跟着圖裏的步驟走:測試
而後點紅圈裏的開發者設置:ui
你會看到這樣的界面,上面列出了已經建立的token和建立/刪除按鈕:加密
下面是如何建立token,這裏建議只勾選你須要的權限,好比提交commit等,權限不是越多越好:3d
建立完成後會把token明文顯示給你,必定要妥善保存,由於頁面一旦關閉/刷新這串token就只有你一我的知道了:code
一旦token遺失或者沒用了,就要及時刪除,好比我剛剛爲了演示而建立的token演示結束就沒用了,因此要刪除:
有了access token,下面就能夠配置自動登陸驗證了。
就是字面意思,用某種方式把密碼或者token存儲起來,在須要的時候能夠獲取這些被存儲的憑證。
git內置了對憑證存儲的支持,經過配置進行:
git config --global credential.helper xxx
若是沒有設置那麼默認不進行存儲,這個xxx
默認有2個選項:
除此以外還支持符合接口規範的第三方應用程序:
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:/apocelipes@github.com':
雖然提示的文字仍然使用的密碼,但輸入的應該是咱們以前建立的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