对凭据帮助程序和 HTTPS 连接进行故障排除Amazon CodeCommit - Amazon CodeCommit
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

对凭据帮助程序和 HTTPS 连接进行故障排除Amazon CodeCommit

以下信息可帮助您排查在使用中包含的凭证辅助程序时的常见问题:Amazon CLI和 HTTPS 来连接到 CodeCommit 存储库。

注意

尽管凭证辅助程序是支持使用联合访问、身份提供程序或临时凭证连接到 CodeCommit 的方法,但推荐的方法是安装和使用git-remote-codecommit实用程序。有关更多信息,请参阅 HTTPS 连接的设置步骤Amazon CodeCommit使用 git-remote-codecommit

在运行git config命令来配置凭据助手

问题:当你尝试运行 git config 命令来配置凭据帮助程序以与 CodeCommit 存储库进行通信时,你会看到一个错误,指出参数太少,或者出现提示 Git 配置命令和语法的使用提示符。

可能的修复措施:出现此错误的最常见原因是 Windows 操作系统上的命令使用单引号,或者在 Linux、macOS 或 Unix 操作系统中使用双引号用于该命令。正确的语法如下:

  • Windows: git config --global credential.helper "!aws codecommit credential-helper $@"

  • Linux、macOS 或 Unix:git config --global credential.helper '!aws codecommit credential-helper $@'

在 Windows 中使用凭证辅助程序时返回的“找不到命令”错误

问题:更新之后AmazonCLI,凭证辅助程序与 CodeCommit 存储库的连接失败,aws codecommit credential-helper $@ get: aws: command not found.

原因:出现此错误的最常见原因是AmazonCLI 版本已更新到使用 Python 3 的版本。MSI 程序包存在一个已知问题。要验证您是否有其中一个受影响的版本,请打开命令行并运行以下命令:aws --version

如果输出 Python 版本以 3 开头,则表示您拥有受影响的版本。例如:

aws-cli/1.16.62 Python/3.6.2 Darwin/16.7.0 botocore/1.12.52

可能的修复措施:您可以执行以下操作之一来解决此问题:

  • 在 Windows 上使用 Python 和 pip 而不是 MSI 来安装和配置 Amazon CLI。有关更多信息,请参阅在 Windows 上安装 Python、pip 和 Amazon CLI

  • 手动编辑 .gitconfig 文件,更改 [credential] 部分以明确指向本地计算机上的 aws.cmd。例如:

    [credential] helper = !"\C:\\Program Files\\Amazon\\AWSCLI\\bin\\aws.cmd\" codecommit credential-helper $@ UseHttpPath = true
  • 运行 git config 命令以更新 .gitconfig 文件来明确引用 aws.cmd,并手动更新 PATH 环境变量以便根据需要包含命令的路径。例如:

    git config --global credential.helper "!aws.cmd codecommit credential-helper $@" git config --global credential.UseHttpPath true

在连接 CodeCommit 存储库时,系统提示我输入用户名

问题:尝试使用凭证辅助程序与 CodeCommit 存储库通信时,系统会显示一条消息,提示您输入您的用户名。

可能的修复措施:配置Amazon或确保所使用的配置文件是为使用 CodeCommit 而配置的。有关设置的更多信息,请参阅HTTPS 连接的设置步骤Amazon CodeCommit使用 Linux、macOS 或 Unix 上的存储库Amazon CLI凭证辅助程序HTTPS 连接的设置步骤Amazon CodeCommitWindows 上的存储库使用Amazon CLI凭证辅助程序。有关 IAM、访问密钥和私有密钥的更多信息,请参阅管理 IAM 用户的访问密钥如何获得凭证?

macOS 版 Git:我成功配置了凭证辅助程序,但在访问我的存储库时被系统拒绝 (403)

问题:在 macOS 上,凭证辅助程序似乎无法正常访问或使用您的凭证。这可能是由以下两种原因导致的:

  • 这些区域有:Amazon CLI已配置为Amazon Web Services 区域与存储库所在的区域不同。

  • Keychain Access 实用程序保存的凭证已过期。

可能的修复措施:验证是否Amazon CLI已针对正确的区域进行配置,请运行aws configure命令,然后查看显示的信息。如果 CodeCommit 存储库位于Amazon Web Services 区域不同于为Amazon CLI,您必须运行aws configure命令并将值更改为适合该区域的值。有关更多信息,请参阅 第 1 步:CodeCommit 的初始配置

在 OS X 和 macOS 上发布的 Git 默认版本使用 Keychain Access 实用程序来保存生成的凭证。为安全起见,为访问您的 CodeCommit 存储库生成的密码是临时的,因此密钥链中存储的凭证将在约 15 分钟后失效。如果只在使用 CodeCommit 时访问 Git,请尝试以下操作:

  1. 在终端上,运行 git config 命令查找在其中定义 Keychain Access 实用程序的 Git 配置文件 (gitconfig)。根据本地系统和首选项的不同,您可能有多个 gitconfig 文件。

    git config -l --show-origin | grep credential

    在此命令的输出中,搜索类似于:

    file:/path/to/gitconfig credential.helper=osxkeychain

    该行开头列出的文件就是您必须编辑的 Git 配置文件。

  2. 要编辑 Git 配置文件,请使用纯文本编辑器或运行以下命令:

    nano /usr/local/git/etc/gitconfig
  3. 使用下列策略之一修改配置:

    • 注释掉或删除包含的凭据部分helper = osxkeychain. 例如:

      # helper = osxkeychain
    • 更新这两者的aws credential helperosxkeychain凭据帮助器部分具有上下文。例如,如果osxkeychain用于向 GitHub 进行身份验证:

      [credential "https://git-codecommit.us-east-1.amazonaws\.com"] helper = !aws --profile CodeCommitProfile codecommit credential-helper $@ UseHttpPath = true [credential "https://github.com"] helper = osxkeychain

      在此配置中,Git 将使用osxkeychain远程主机匹配时的助手”https://github.com“以及远程主机匹配时的凭据助手”https://git-codecommit\.us-east-1\.amazonaws.com“。

    • 在凭据助手之前包含一个空字符串助手。例如:

      [credential] helper = helper = !aws --profile CodeCommitProfile codecommit credential-helper $@ UseHttpPath = true

    或者,如果您希望继续使用 Keychain Access 实用程序来缓存其他 Git 存储库的凭证,请修改标头,而不要注释掉该行。例如,要允许使用缓存的 GitHub 凭证,您可以按如下所示修改标头:

    [credential "https://github.com"] helper = osxkeychain

如果要使用 Git 访问其他存储库,您可以将 Keychain Access 实用程序配置为不为您的 CodeCommit 存储库提供凭证。配置 Keychain Access 实用程序:

  1. 打开 Keychain Access 实用程序。(您可以使用 Finder 查找它。)

  2. 搜索git-codecommit.us-east-2.amazonaws.com然后替换us-east-2使用Amazon Web Services 区域存储库存在的位置。突出显示该行,打开上下文菜单 (右键单击),然后选择 Get Info

  3. 选择 Access Control 选项卡。

  4. Confirm before allowing access (运行访问前进行确认) 中,选择 git-credential-osxkeychain,然后选择减号将它从列表中删除。

    注意

    从列表中删除 git-credential-osxkeychain 后,您在每次运行 Git 命令时都会看到一个对话框。选择拒绝以继续。如果不希望显示弹出对话框,可考虑下面几种替代选项:

    • 使用 SSH Connect 到 CodeCommit或 Git 凭证代替凭证辅助程序HTTPS。有关更多信息,请参阅对于 Linux、macOS 或 Unix 上的 SSH 连接使用 Git 凭据为 HTTPS 用户设置

    • 在 Keychain Access 实用程序中,在访问控制选项卡git-codecommit.us-east-2.amazonaws.com,选择允许所有应用程序访问此项目(访问此项目不受限制)选项。这将阻止弹出窗口,但凭证终究会到期(平均而言,大约需要 15 分钟),然后会出现 403 错误消息。如果发生这种情况,您必须删除密钥链项才能恢复功能。

    • 安装默认不使用密钥链的 Git 版本。

    • 考虑制定一个删除密钥链项的脚本解决方案。要查看社区生成的脚本解决方案示例,请参阅中的 定期删除 OS X Certificate Store 中缓存凭证的 Mac OS X 脚本产品和服务集成

如果要完全阻止 Git 使用 Keychain Access 实用工具,可以配置 Git 以停止使用 osxkeychain 作为凭证辅助程序。例如,如果您打开一个终端并运行命令 git config --system credential.helper,并且它返回 osxkeychain,则 Git 设置为使用 Keychain Access 实用程序。您可以使用以下命令更改此设置:

git config --system --unset credential.helper

请注意,通过运行此命令--system选项会在系统范围内更改所有用户的 Git 行为,这可能会对其他用户或其他存储库产生意外的后果(如果您使用的是之外的其他存储库服务)。还要注意,此方法可能需要使用 sudo,并且您的账户可能没有足够的系统权限来应用此更改。确保通过重新运行 git config --system credential.helper 命令来验证该命令是否已成功应用。有关更多信息,请参阅自定义 Git – Git 配置Stack Overflow 上的此文章

Windows 版 Git:Windows 版 Git 安装了 Git,但被系统拒绝访问我的存储库 (403)

问题:在 Windows 上,凭证辅助程序似乎无法正常访问或使用您的凭证。这可能是由多种原因导致的:

  • 这些区域有:Amazon CLI已配置为Amazon Web Services 区域与存储库所在的区域不同。

  • 默认情况下,Windows 版 Git 会安装与 CodeCommit 连接不兼容的 Git 凭证管理器实用程序,后者使用Amazon凭证辅助程序。安装后,它会导致与存储库的连接失败,即使凭证辅助程序已随安装Amazon CLI并配置为连接到 CodeCommit。

  • 某些版本的 Windows 版 Git 不完全符合 RFC 2617RFC 4559 标准,这可能会导致 Git 凭证和 Amazon CLI 随附的凭证辅助程序出现问题。有关更多信息,请参阅 Version 2.11.0(3) does not ask for username/password

可能的修复措施:

  • 如果尝试使用 Amazon CLI 随附的凭证辅助程序,请考虑经由 HTTPS 使用 Git 凭证进行连接,而不要使用凭证辅助程序。与的凭证辅助程序不同,为 IAM 用户配置的 Git 凭证与 Windows 版 Git Credential Manager Credential Manager 兼容。Amazon CodeCommit. 有关更多信息,请参阅 对于使用 Git 凭据的 HTTPS 用户

    如果需要使用凭证辅助程序,请验证是否Amazon CLI已配置为正确Amazon Web Services 区域,运行aws configure命令,然后查看显示的信息。如果 CodeCommit 存储库位于Amazon Web Services 区域不同于为Amazon CLI,您必须运行aws configure命令并将值更改为适合该区域的值。有关更多信息,请参阅 第 1 步:CodeCommit 的初始配置

  • 如果可能,请卸载并重新安装 Windows 版 Git。在安装 Windows 版 Git 时,清除安装 Git Credential Manager 实用程序选项的复选框。该凭证管理器与 Amazon CodeCommit 的凭证辅助程序不兼容。如果安装了 Git Credential Manager 或其他凭证管理实用程序,但不想卸载它,也可以修改.gitconfig文件并为 CodeCommit 添加凭据管理:

    1. 打开控制面板,选择凭证管理器,然后删除存储的所有 CodeCommit 凭证。

    2. 用任意纯文本编辑器(如“记事本”)打开您的 .gitconfig 文件。

      注意

      如果使用多个 Git 配置文件,则可能同时存在本地和全局 .gitconfig 文件。请务必编辑相应的文件。

    3. 向您的 .gitconfig 文件添加以下部分:

      [credential "https://git-codecommit.*.amazonaws.com"] helper = !aws codecommit credential-helper $@ UseHttpPath = true
    4. 保存文件,打开一个新的命令行会话,再次尝试连接。

    如果需要使用凭证辅助程序,也可以使用这种方法:Amazon CodeCommit在连接其他托管存储库(例如 GitHub 存储库)时,连接到 CodeCommit 存储库和其他凭证管理系统。

    要重置默认使用的凭证辅助程序,可以在运行 git config 命令时使用 --system 选项取代 --global--local

  • 在 Windows 计算机上使用 Git 凭证时,可以通过在连接字符串中包含 Git 凭证用户名来解决任何 RFC 不合规问题。例如,要解决此问题并克隆名为的存储库MyDemoRepo在美国东部(俄亥俄)区域:

    git clone https://Your-Git-Credential-Username@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo
    注意

    如果您的 Git 凭证用户名中含有 @ 字符,则这种方法无效。您必须对该字符进行 URL 编码(也称作 URL 转义或百分号编码)。