圖解如何在Linux上配置git自動登入驗證
阿新 • • 發佈:2021-03-06
記錄一下配置git操作遠端倉庫時的自動驗證,效果如下圖:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182411904-1755641524.png)
本文介紹的是Linux下的配置。Windows上預設已經啟用憑證儲存和自動驗證(依靠wincred實現,以後會使用[GCM-Core](https://github.com/microsoft/Git-Credential-Manager-Core))。
## 準備工作
首先需要Linux系統上安裝了dbus或者是gnome-keyring(依賴於dbus),如果可能的話需要安裝libsecret,這是一個更現代的用於憑證管理的庫。因為我們需要藉助dbus的service才行實現憑證儲存:
```bash
# 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,然後跟著圖裡的步驟走:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182359905-1962362792.png)
然後點紅圈裡的開發者設定:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182349587-971275141.png)
你會看到這樣的介面,上面列出了已經建立的token和建立/刪除按鈕:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182339304-1946787638.png)
下面是如何建立token,這裡建議只勾選你需要的許可權,比如提交commit等,許可權不是越多越好:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182325025-1258027996.png)
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182312054-1279358607.png)
建立完成後會把token明文顯示給你,一定要妥善儲存,因為頁面一旦關閉/重新整理這串token就只有你一個人知道了:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182259581-1668326275.png)
一旦token遺失或者沒用了,就要及時刪除,比如我剛剛為了演示而建立的token演示結束就沒用了,所以要刪除:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182244915-657510648.png)
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182232034-144668148.png)
有了access token,下面就可以配置自動登入驗證了。
## 什麼是憑證儲存
就是字面意思,用某種方式把密碼或者token儲存起來,在需要的時候可以獲取這些被儲存的憑證。
git內建了對憑證儲存的支援,通過配置進行:
```bash
git config --global credential.helper xxx
```
如果沒有設定那麼預設不進行儲存,這個`xxx`預設有2個選項:
1. store 把憑證用明文儲存在$HOME目錄下,為了安全建議不要設定它
2. cache 把憑證儲存在記憶體裡15分鐘,15分鐘後刪除
除此之外還支援符合介面規範的第三方應用程式:
```bash
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`:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182218477-1798344559.png)
上圖是Arch Linux上的情況,gnome-keyring和libsecret、netrc是Linux上可以使用的工具。
因為都是原始碼,所以我們得先進行編譯。
## 配置
我們選擇libsecret,因為gnome-keyring未來會被廢棄。
採用下面的命令編譯,以Ubuntu為例子:
```bash
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
# 如果目錄所在的檔案系統是ext4,xfs,btrfs,還可以用下面的命令禁止對程式的任何修改
sudo chattr +i git-credential-libsecret
```
你可以把該目錄新增進$PATH,然後指定`credential.helper`:
```bash
echo '$PATH=$PATH:/usr/share/doc/git/contrib/credential/libsecret' >> ~/.bashrc
git config --global credential.helper libsecret
```
或者你不想修改$PATH,可以這樣配置:
```bash
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
```
這樣就大功告成了。
## 執行
為了測試,我們隨便選擇一個自己的專案,先clone到本地,然後做些修改後commit。
只有在修改遠端倉庫的時候才會進行憑證驗證,比如push。通常的過程是這樣的:
```bash
$ git push origin dev
Username for 'https://github.com': apocelipes
Password for 'https:/[email protected]':
```
雖然提示的文字仍然使用的密碼,但輸入的應該是我們之前建立的access token。
驗證通過後就會把變更push到origin,但配置自動驗證後第一次仍然需要輸入憑證,然後現在會是這樣:
![](https://img2020.cnblogs.com/blog/1434464/202103/1434464-20210306182158113-1485083872.png)
需要為你的金鑰環配置一個單獨的密碼,你也可以選擇使用者的預設密碼,配置完成後憑證就會被安全地儲存了。
下次push將不會再驗證使用者名稱和憑證,效果和文章開頭的圖片裡一樣。
這樣自動登入認證就配置完成了。
##### 參考