凭证助手和 HTTPS 与 Amazon CodeCommit 的连接问题排查 - Amazon CodeCommit
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

凭证助手和 HTTPS 与 Amazon CodeCommit 的连接问题排查

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

注意

虽然使用联合访问、身份提供者或临时凭证连接到 CodeCommit 时,凭证助手是一种受支持的方法,但建议方法是安装并使用 git-remote-codecommit 实用程序。有关更多信息,请参阅使用 git-remote-codecommit 建立到 Amazon CodeCommit 的 HTTPS 连接的设置步骤

在运行 git config 命令来配置凭证助手时,收到错误

问题:尝试运行 git config 命令来配置凭证助手以与 CodeCommit 存储库通信时,显示一个错误,指示参数太少,或者显示一个用法提示,建议使用 Git config 命令和语法。

可能的修复措施:出现此错误的最常见原因是,在 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 中使用凭证辅助程序时返回的“找不到命令”错误

问题:更新 Amazon CLI 后,凭证助手与 CodeCommit 存储库的连接失败,并显示 aws codecommit credential-helper $@ get: aws: command not found

原因:出现此错误的最常见原因是,您的 Amazon CLI 版本已更新到使用 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 而配置的。有关设置的更多信息,请参阅使用 Amazon CLI 凭证助手在 Linux、macOS 或 Unix 上对 Amazon CodeCommit 存储库进行 HTTPS 连接的设置步骤使用 Amazon CLI 凭证助手在 Windows 上设置到 Amazon CodeCommit 存储库的 HTTPS 连接的步骤。有关 IAM、访问密钥和秘密密钥的更多信息,请参阅管理 IAM 用户的访问密钥如何获取凭证?

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

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

  • 将 Amazon CLI 配置为与存储库所在区域不同的 Amazon Web Services 区域。

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

可能的修复措施:要验证为 Amazon CLI 配置的区域是否正确,请运行aws configure 命令,并查看显示的信息。如果 CodeCommit 存储库所在的 Amazon Web Services 区域与 Amazon CLI 显示的 AWS 区域不同,则必须运行 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

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

    • 在凭证助手之前添加一个空字符串助手。例如:

      [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 或 Git 凭证而不是使用凭证助手和 HTTPS 连接到 CodeCommit。有关更多信息,请参阅 适用于 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 行为,这可能会对其他用户或其他存储库产生意外的后果(如果您使用的是 CodeCommit 之外的其他存储库服务)。还要注意,此方法可能需要使用 sudo,并且您的账户可能没有足够的系统权限来应用此更改。确保通过重新运行 git config --system credential.helper 命令来验证该命令是否已成功应用。有关更多信息,请参阅自定义 Git – Git 配置Stack Overflow 上的此文章

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

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

  • 将 Amazon CLI 配置为与存储库所在区域不同的 Amazon Web Services 区域。

  • 默认情况下,Windows 版 Git 会安装与 CodeCommit 连接不兼容的 Git Credential Manager 实用程序,CodeCommit 连接使用 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 凭证进行连接,而不要使用凭证辅助程序。与 Amazon CodeCommit 凭证助手不同,为 IAM 用户配置的 Git 凭证与 Windows 版 Git Credential Manager 兼容。有关更多信息,请参阅适用于使用 Git 凭证的 HTTPS 用户

    如果需要使用凭证助手,请运行 aws configure 命令并查看显示的信息,验证为 Amazon CLI 配置的 Amazon Web Services 区域是否正确。如果 CodeCommit 存储库所在的 Amazon Web Services 区域与 Amazon CLI 显示的 AWS 区域不同,则必须运行 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. 保存文件,打开一个新的命令行会话,再次尝试连接。

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

    要重置默认使用的凭证辅助程序,可以在运行 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 转义或百分号编码)。