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

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

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

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

注意

虽然使用联合访问、身份提供者或临时凭证连接到 CodeCommit 时,凭证助手是一种受支持的方法,但建议方法是安装并使用 git-remote-codecommit 实用程序。有关更多信息,请参阅使用 git-remote-codecommit 建立到 AWS 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 中使用凭证辅助程序时返回的“找不到命令”错误

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

原因:出现此错误的最常见原因是,您的 AWS 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 来安装和配置 AWS CLI。有关更多信息,请参阅在 Windows 上安装 Python、pip 和 AWS 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 存储库通信时,显示一条消息,提示您输入您的用户名。

可能的修复措施:配置您的 AWS 配置文件或确保所使用的配置文件是为使用 CodeCommit 而配置的。有关设置的更多信息,请参阅使用 AWS CLI 凭证助手在 Linux、macOS 或 Unix 上对 AWS CodeCommit 存储库进行 HTTPS 连接的设置步骤使用 AWS CLI 凭证助手在 Windows 上设置到 AWS CodeCommit 存储库的 HTTPS 连接的步骤。有关 IAM、访问密钥和秘密密钥的更多信息,请参阅管理 IAM 用户的访问密钥如何获取凭证?

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

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

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

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

可能的修复措施:要验证为 AWS CLI 配置的区域是否正确,请运行aws configure 命令,并查看显示的信息。如果 CodeCommit 存储库所在的 AWS 区域与 AWS 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 替换为存储库所在的 AWS 区域。突出显示该行,打开上下文菜单 (右键单击),然后选择 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 上,凭证辅助程序似乎无法正常访问或使用您的凭证。这可能是由多种原因导致的:

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

  • 默认情况下,Windows 版 Git 会安装与 CodeCommit 连接不兼容的 Git Credential Manager 实用程序,CodeCommit 连接使用 AWS 凭证助手。安装后,即使凭证助手已随 AWS CLI 安装并针对到 CodeCommit 的连接进行了配置,仍会导致与存储库的连接失败。

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

可能的修复措施:

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

    如果需要使用凭证助手,请运行 aws configure 命令并查看显示的信息,验证为 AWS CLI 配置的 AWS 区域是否正确。如果 CodeCommit 存储库所在的 AWS 区域与 AWS CLI 显示的 AWS 区域不同,则必须运行 aws configure 命令,将这些值更改为该区域相应的值。有关更多信息,请参阅步骤 1:CodeCommit 的初始配置

  • 如果可能,请卸载并重新安装 Windows 版 Git。在安装 Windows 版 Git 时,清除安装 Git Credential Manager 实用程序选项的复选框。该凭证管理器与 AWS 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 存储库时使用 AWS 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 转义或百分号编码)。