首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

g4e常见问题#1 解决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或以上版本才能正常使用。

安装完成后,请通过命令行输入以下命令

运行以下命令

配置完成后就可以正常使用了,第一次从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 工具中输入以下命令

注意:以上我使用了所有参数的默认值,特别是passphrase中也使用了空密码,这主要是为了方便在操作存储库的时候不用一直输入密码。

生成的 ssh key pair (包括公钥和私钥文件)会被保存到 c:\users\\.ssh目录中,如下图:

ssh key pair 生成好以后还需要把公钥文件的内容(以上.pub文件)复制到VSTS/TFS服务器的SSH KEY列表中,确保VSTS/TFS服务器可以识别

然后就可以通过ssh url来操作git存储库了,首先获取ssh url如下图

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

注:如果使用的是自己搭建的TFS服务器,还需要确保服务器的22端口已经正确打开

小结

以上2种版本都可以确保你在 Windows 上顺利的连接到远程 Git 存储库。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180116B02QWY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com