【问题标题】:Cannot clone git from Azure DevOps using PAT无法使用 PAT 从 Azure DevOps 克隆 git
【发布时间】:2019-04-05 23:43:12
【问题描述】:

我无法从 Azure DevOps 克隆简单的存储库。 操作系统:Ubuntu 18.10

我这样做:

  • 开始使用 Azure DevOps
  • 点击右上角我的用户名
  • 转到安全选项卡
  • 创建一个包含所有范围的 PAT(确保没有范围 问题)
  • 将 PAT 复制到剪贴板
  • 将 PAT 粘贴到其他位置以确认 PAT 已正确复制(我知道...不安全,但这超出了本问题的范围)
  • 转到我的控制台
  • 问题:git clone https://myorganization.visualstudio.com/myproject/_git/myrepo/
  • 我输入用户名和密码(PAT)

我不断收到来自 Git 的这条消息: fatal: Authentication failed for 'https://myorganization.visualstudio.com/myproject/_git/myrepo/'

我正在阅读其他人的解决方案,但没有一个对我有用。 我也试过这个:

  • https://usename:token@myorganization.visualstudio.com/myproject/_git/myrepo/ 的形式传递令牌我真的很惊讶人们说这有效......因为我的 git 抱怨 因为相信 : 表示端口。
  • 试图 激活/停用 git 的凭证管理器 * 在 Windows 和 Ubuntu。
  • 已尝试激活和停用简单凭据。
  • 尝试使用简单的凭据,即用户名 + 密码。
  • 试图将我的用户名放入https://username@....
  • 尝试使用 SSH
  • 尝试在 git 命令中使用 http.extraHeader,标头为
    Authorization: Basic Base64Encoded(uname:PAT)
  • 尝试在 git 命令中使用 http.extraHeader,标头为
    Authorization: Bearer PAT
  • 尝试使用 VSCode 客户端。它自己生成 PAT,但仍然无法进行身份验证和克隆。
  • 尝试使用 Rider VSTS 客户端。它自己生成 PAT,但仍然无法进行身份验证和克隆。
  • 尝试使用 Linux 的 git 凭据管理器。它提示代码,当我们在浏览器中进行身份验证时,它会成功生成 PAT。不过,在那之后无法进行身份验证。

任何线索为什么这不起作用?

【问题讨论】:

  • 您是否尝试过使用 SSH 密钥认证?
  • 您可以使用用户名(电子邮件)和密码(不是 PAT)进行克隆吗?
  • 没有。我想使用 HTTPS。正如问题所述,是的,我尝试了用户名和密码,但结果相同。

标签: git authentication azure-devops token access-token


【解决方案1】:

尝试: 首先从凭据管理器中删除 git 凭据。 尝试生成新的个人访问令牌来解决此错误

转到安全->个人访问令牌->添加 给出描述,选择所有范围,点击创建令牌。

复制令牌并将其存储以供以后使用。现在可以使用此令牌代替 git 用户的密码。

【讨论】:

  • 你在这篇文章中提到的错误与我的问题完全无关。
【解决方案2】:

我遇到了同样的问题,并花了很长时间寻找解决方案。我终于遇到了this post,其中包含Martinius79的cmets部分的解决方案。

简而言之,它需要通过 git http.extraheaders 传递用户名和 PAT,编码为 base64,才能对其进行身份验证。

100% 归功于原作者,只是将其包含在此处以帮助其他人找到它:

示例: git -c http.extraheader="授权:基本 TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh" 克隆 https://tfs.address/tfs/Collection/Project/_git/RepoName

使用的基本令牌 BASE64 编码:TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh

基本令牌 BASE64 解码:MyGitSyncUser:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a

令牌的构造来自: 在这个例子中: 虚构用户名:MyGitSyncUser 二手 PAT:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a

我希望这会有所帮助!

【讨论】:

  • 真的很有前途。让我试试
  • 这绝对是正确的答案。在使用普通 PAT(无需 Base64 编码)在 Windows 上成功测试后,我在 Ubuntu 上为此苦苦挣扎了一段时间。请注意,根据示例,您 需要 使用 base64 编码的用户名。试过没有,它不起作用。
  • 对我来说这是行不通的。 IE。我得到与不设置 -c http.extraheader 相同的结果
  • 我将此添加到我的 .bashrc 中:AZURE_PAT="<your PAT>"; AZURE_AUTH_HEADER=$(echo -n "anything:$AZURE_PATH" |base64 -w0); alias azure-git='git -c http.extraheader="AUTHORIZATION: Basic ${AZURE_AUTH_HEADER}"'
  • 在 SO 上尝试了许多答案之后。这解决了我的问题。非常感谢!
【解决方案3】:

我已经成功使用了这样的 PAT;

  1. 为您的存储库复制克隆 URL,例如git clone https://<domain>.visualstudio.com/<domain>/_git/<domain>
  2. 复制后 PAT 用作;

git clone https://<PAT>@<domain>.visualstudio.com/<domain>/_git/<domain>

不需要用户名和密码,因为 PAT 就足够了。

【讨论】:

  • 这行得通,但是我必须添加/替换 - 例如git clone https://@mydomain.visualstudio.com/myproject/_git/myrepo
  • 是的,它也适用于 Mac OS Big Sur。在 VS Code 中的终端上运行命令。
  • 这也适用于新的 dev.azure.com 地址。事实上,我可以开始工作的唯一风格。我的特殊情况:https://$(System.AccessToken)@dev.azure.com///_git/
【解决方案4】:

这是 Ubuntu 18.10 附带的 curl 7.61.0 中的已知回归。回归在 curl 7.61.1 中得到修复,但 Ubuntu 18.10 还没有这个修复。查看(并点赞)https://bugs.launchpad.net/ubuntu/+source/curl/+bug/1805203

【讨论】:

    【解决方案5】:

    我遇到了同样的问题,只使用 HTTPS 解决了。

    我发现我必须只使用终端,而不是使用 dev.azure 提供的任何“GUI 快捷方式”,因为它们适用于 git-credential-manager,它在 Windows 上运行良好,但在 Ubuntu 上已损坏。

    显然,dev.azure git 存储库具有不同的凭据(您需要设置)而不是您的 Microsoft 帐户凭据。

    假设我的 Microsoft 帐户用户名是 johndoe@outlook.com,密码为 Jd1986

    如果您尝试进行 git 克隆,此凭证将起作用,因为您需要为您的项目生成 git 凭证然后使用它。

    您可以从这里生成 git 凭证,

    在此之后,保存并使用设置的凭据。

    转到您的终端,并使用 git clone 的 HTTP url 并输入给定的凭据。这对我有用。

    【讨论】:

    • 这是 Azure DevOps -> Azure DevOps repo 导入的正确答案。我一直收到错误消息:克隆 URL 不正确。克隆 URL 需要授权。
    • 你不需要这样做。您所需要的只是用于克隆。 accessToken 是 System.AccessToken $"git -c http.extraheader=\"AUTHORIZATION: bearer {accessToken}\" clone --depth 1 {repo1.ProjectTargetUrl}".BashOut();而 BashOut 只是一个辅助方法,可以使用转义字符转换为 bash 命令
    • 如果你需要 creds 生成和 ssh cred 并将其应用到 mac。我认为这是非常不安全的替代凭证。你不应该使用它们,微软也明确表示不要使用它们。
    【解决方案6】:

    Git http.extraheader & Bearer

    YAML 风格的管道可以使用预设变量System.AccessToken。在检查了流水线开头的正式“结帐...”步骤后,我发现此步骤可以在我的脚本中使用:

    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: 'git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone --depth 1 https://my-org@dev.azure.com/my-org/my-proj/_git/my-repo'
    

    请注意,Azure DevOps job authorization scope 可能会影响这一点

    【讨论】:

    • 您可以在不需要 yaml 的情况下发出相同的命令。这是正确答案
    • 一个警告,访问令牌不能推送,因为管道是只读的。
    【解决方案7】:

    确保您是 Contributor 组的成员,并且您的 权限 不限于 azure repo 上的用户或组。

    Azure Contributor 组默认具有克隆、获取和探索存储库内容的权限;此外,还可以创建、评论、投票和参与拉取请求。

    Project Administrator Group 的成员或将 管理权限 设置为允许 Git 存储库(如 here 所述)的成员可以编辑任何此类权限。

    如果您的组或用户没有克隆存储库的权限,您将得到问题描述的行为。

    【讨论】:

    • 请解释如何/为什么解决了所描述的问题。
    • 什么都不回答
    【解决方案8】:

    这个official guide procedure 为我工作,但有一点很重要。 base64编码时,一定要注意不可打印的字符。

    指南说:

    MY_PAT=yourPAT      # replace "yourPAT" with your actual PAT
    B64_PAT=$(printf ":$MY_PAT" | base64)
    git -c http.extraHeader="Authorization: Basic ${B64_PAT}" clone 
    https://dev.azure.com/yourOrgName/yourProjectName/_git/yourRepoName
    

    使用“echo”而不是“printf”会插入一个换行符,更改 base64 字符串(可能也适用于“echo -n”,但我没有尝试过)。 另外,不要包括用户名,如上面的 sn-p。

    在 Ubuntu 18.04 上使用 git 2.17.1。

    【讨论】:

    • 这刚刚结束了为期 2 天的疯狂调试。谢谢!
    【解决方案9】:
    1. 登录 Azure Dev Ops 门户。
    2. 转到您要克隆的项目。
    3. 从左侧菜单中选择 Repo。
    4. 点击右上角的克隆。
    5. 单击生成 Git 凭据
    6. 输入您要克隆存储库的给定 https 克隆 URL、用户名和密码。
    7. 你完成了!

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 2020-03-02
      • 2021-01-28
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多