1. 程式人生 > >g4e常見問題#1 解決Git在Windows上使用http/https無法認證的問題

g4e常見問題#1 解決Git在Windows上使用http/https無法認證的問題

來源 | 公眾號:DevOps

作者 | 徐磊

由於 Git 本身託身與 Linux 軟體的開發過程,所以在 Linux 和類似的 Mac 環境中使用 Git 具備天然的優勢,這也同時造成了在 Windows 上使用Git的困難。

這個問題在使用者身份認證方面尤其明顯,特別是對於企業開發者來說。你可能會在剛開始使用 Git 的時候遇到類似以下的錯誤資訊,特別是針對 Team Foundation Server 所提供的Git伺服器:

Fatal: Authentication failed for …

?wx_fmt=png&wxfrom=5&wx_lazy=1

解決這個問題有2種方式:

方式1 – 強制Git Crdential Manager for Windows使用Basic 認證方式

我們需要針對 Git Credential Manager 進行一定的配置。Git Credential Manager 是一個外掛系統,可以允許不同平臺通過不同的工具將身份認證資訊進行安全儲存,避免在操作遠端儲存庫的時候頻繁輸入使用者名稱和密碼。

要解決以上問題,首先確保使用了最新版本的 Git for Windows 安裝(至少2.15版本以上),並且在安裝的時候配置了以下選項:

?wx_fmt=png&wxfrom=5&wx_lazy=1

注:你還需要 .NET Framework 4.5.1或以上版本才能正常使用。

安裝完成後,請通過命令列輸入以下命令

執行以下命令

?wx_fmt=png

配置完成後就可以正常使用了,第一次從TFS遠端儲存庫克隆程式碼時Windows會詢問你的使用者名稱和密碼,輸入成功克隆即可開始,後續的操作就不再會彈出了。

?wx_fmt=png

?wx_fmt=png

你剛才輸入的認證資訊被儲存在 Windows 憑據管理器 裡面了。

?wx_fmt=png

如果你連線的是VSTS,那麼彈出的是類似以下的一個Azure Active Directory (AAD)的登陸視窗,你需要輸入你的Live ID。

完成之後,你的身份資訊會被存放在Windows憑據管理器,不過存放的是一個叫做PAT (Person Access Token)的令牌。

?wx_fmt=png

如果要檢視這個令牌,可以通過當前使用者的選單中選擇 Security進入 Personal Access Token的配置頁面進行檢視

?wx_fmt=png

你會主要到這個 PAT 只對 Code (read and write) 和 Packing (read)兩項內容進行了授權,這是為了確保最小安全性配置。

?wx_fmt=png

進入 Windows 憑據管理器管理器,你就可以看到這個憑據已經被儲存。

Git Credential Manager for Windows 的工作機制

這個 Credential Manager 會首先嚐試使用當前登陸計算機的使用者賬號連線遠端的 TFS 伺服器,如果本地計算機和遠端 TFS 同在一個 AD 域並且登陸賬號已經具備了訪問 Git 倉庫的許可權,則會直接成功;如果不成功則會彈出登陸對話方塊要求使用者登入。

但是如果當前計算機沒有在TFS所屬的AD域中,則會直接給出Authentication Failed的錯誤並退出。

這是因為在這個場景下無法直接使用 NTLM 進行身份認證(因為不在同一個域),但是因為TFS返回的資訊要求使用NTLM,就會出現以上問題。

我們的解決辦法是強制本地的 Credential Manager 使用Basic方式傳送使用者名稱和密碼,雖然在這種情況下會有一定的安全性問題,但是如果伺服器啟用了https加密就沒有關係了。

方法 2 – 使用SSH Key的方式進行認證

SSH Key 認證方式是在 Linux/MacOS 上非常常見的一種認證方式,在Git中也被很好的支援,如果要在 Windows上使用,首先我們需要使用 cmder 命令列工具生成自己的 ssh key pair。

在 cmder 工具中輸入以下命令

?wx_fmt=png

?wx_fmt=png

注意:以上我使用了所有引數的預設值,特別是passphrase中也使用了空密碼,這主要是為了方便在操作儲存庫的時候不用一直輸入密碼。

生成的 ssh key pair (包括公鑰和私鑰檔案)會被儲存到 c:\users\{當前使用者}\.ssh目錄中,如下圖:

?wx_fmt=png

ssh key pair 生成好以後還需要把公鑰檔案的內容(以上.pub檔案)複製到VSTS/TFS伺服器的SSH KEY列表中,確保VSTS/TFS伺服器可以識別

?wx_fmt=png

?wx_fmt=png

然後就可以通過ssh url來操作git儲存庫了,首先獲取ssh url如下圖

?wx_fmt=png

然後使用 git clone命令克隆程式碼

?wx_fmt=png

?wx_fmt=png

注:如果使用的是自己搭建的TFS伺服器,還需要確保伺服器的22埠已經正確開啟

小結

以上2種版本都可以確保你在 Windows 上順利的連線到遠端 Git 儲存庫。