解決Git在Windows上使用http/https無法認證的問題


 

由於Git本身托身與Linux軟件的開發過程,所以在Linux和類似的Mac環境中使用Git具備天然的優勢,這也同時造成了在Windows
上使用Git的困難。這個問題在用戶身份認證方面尤其明顯,特別是對於企業開發者來說。你可能會在剛開始使用Git的時候遇到類似以下的錯誤信息,特別是針對
Team Foundation Server 所提供的Git服務器:

 

 

Fatal: Authentication failed for …

 

 

 

 

解決這個問題有2種方式

 

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

 

我們需要針對 Git Credential Manager 進行一定的配置。Git Credential Manager
是一個插件系統,可以允許不同平台通過不同的工具將身份認證信息進行安全保存,避免在操作遠程存儲庫的時候頻繁輸入用戶名和密碼。

 

 

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

 

 

 

 

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

 

 

安裝完成后,請通過命令行輸入以下命令

 

 

運行以下命令

 

 

>>> git config --global credential.helper manager

 

 

>>> git config --global credential.modalprompt true

 

 

>>> git config --global credential.{你的TFS服務器地址}.authority Basic

 

 

注:以上{你的TFS服務器地址}需要替換成你自己的TFS服務器的地址,比如:我公司的TFS服務器是
https://tfs.companyXXX.com
則需要執行的命令就是

 

 

>>> git config --global credential.tfs.companyXXX.com.authority Basic

 

 

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

 

 

 

 

你剛才輸入的認證信息被保存在 Windows 憑據管理器 里面了。

 

 

 

 

如果你連接的是VSTS,那么彈出的是類似以下的一個Azure Active Directory
(AAD)的登陸窗口,你需要輸入你的Live
ID。完成之后,你的身份信息會被存放在Windows憑據管理器,不過存放的是一個叫做PAT
(Person Access Token)的令牌。

 

 

 

 

如果要查看這個令牌,可以通過當前用戶的菜單中選擇 Security進入 Personal Access
Token的配置頁面進行查看

 

 

 

 

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

 

 

 

 

進入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工具中輸入以下命令

 

 

ssh-keygen -C "密鑰注釋"

 

 

 

 

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

 

 

生成的 ssh key pair (包括公鑰和私鑰文件)會被保存到
c:\users\{當前用戶}\.ssh目錄中,如下圖:

 

 

 

 

ssh key pair
生成好以后還需要把公鑰文件的內容(以上.pub文件)復制到VSTS/TFS服務器的SSH
KEY列表中,確保VSTS/TFS服務器可以識別

 

 

 

 

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

 

 

 

 

然后使用 git clone命令克隆代碼

 

 

>>> git clone {ssh url}

 

 

 

 

注:如果使用的是自己搭建的TFS服務器,還需要確保服務器的22端口已經正確打開

 

小結

 

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

 

 

由於Git本身托身與Linux軟件的開發過程,所以在Linux和類似的Mac環境中使用Git具備天然的優勢,這也同時造成了在Windows
上使用Git的困難。這個問題在用戶身份認證方面尤其明顯,特別是對於企業開發者來說。你可能會在剛開始使用Git的時候遇到類似以下的錯誤信息,特別是針對
Team Foundation Server 所提供的Git服務器:

 

 

Fatal: Authentication failed for …

 

 

 

 

解決這個問題有2種方式

 

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

 

我們需要針對 Git Credential Manager 進行一定的配置。Git Credential Manager
是一個插件系統,可以允許不同平台通過不同的工具將身份認證信息進行安全保存,避免在操作遠程存儲庫的時候頻繁輸入用戶名和密碼。

 

 

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

 

 

 

 

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

 

 

安裝完成后,請通過命令行輸入以下命令

 

 

運行以下命令

 

 

>>> git config --global credential.helper manager

 

 

>>> git config --global credential.modalprompt true

 

 

>>> git config --global credential.{你的TFS服務器地址}.authority Basic

 

 

注:以上{你的TFS服務器地址}需要替換成你自己的TFS服務器的地址,比如:我公司的TFS服務器是
https://tfs.companyXXX.com
則需要執行的命令就是

 

 

>>> git config --global credential.tfs.companyXXX.com.authority Basic

 

 

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

 

 

 

 

你剛才輸入的認證信息被保存在 Windows 憑據管理器 里面了。

 

 

 

 

如果你連接的是VSTS,那么彈出的是類似以下的一個Azure Active Directory
(AAD)的登陸窗口,你需要輸入你的Live
ID。完成之后,你的身份信息會被存放在Windows憑據管理器,不過存放的是一個叫做PAT
(Person Access Token)的令牌。

 

 

 

 

如果要查看這個令牌,可以通過當前用戶的菜單中選擇 Security進入 Personal Access
Token的配置頁面進行查看

 

 

 

 

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

 

 

 

 

進入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工具中輸入以下命令

 

 

ssh-keygen -C "密鑰注釋"

 

 

 

 

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

 

 

生成的 ssh key pair (包括公鑰和私鑰文件)會被保存到
c:\users\{當前用戶}\.ssh目錄中,如下圖:

 

 

 

 

ssh key pair
生成好以后還需要把公鑰文件的內容(以上.pub文件)復制到VSTS/TFS服務器的SSH
KEY列表中,確保VSTS/TFS服務器可以識別

 

 

 

 

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

 

 

 

 

然后使用 git clone命令克隆代碼

 

 

>>> git clone {ssh url}

 

 

 

 

注:如果使用的是自己搭建的TFS服務器,還需要確保服務器的22端口已經正確打開

 

小結

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM