AWS CodeCommit
用户指南 (API 版本 2015-04-13)

对凭证辅助程序和到 AWS CodeCommit 的 HTTPS 连接进行问题排查

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

在 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 而配置的。有关设置的更多信息,请参阅在 Linux, macOS, or Unix 上使用 AWS CLI 凭证辅助程序设置到 AWS CodeCommit 存储库的 HTTPS 连接的步骤在 Windows 上使用 AWS CLI 凭证辅助程序设置到 AWS CodeCommit 存储库的 HTTPS 连接的步骤。有关 IAM、访问密钥和私有密钥的更多信息,请参阅 管理 IAM 用户的访问密钥如何获取凭证?

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

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

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

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

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

    在此命令的输出中,查找包含以下选项的行:

    helper = osxkeychain

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

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

    $ nano /usr/local/git/etc/gitconfig
  3. 注释掉以下文本行:

    # helper = osxkeychain

    或者,如果您希望继续使用 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。突出显示该行,打开上下文菜单 (右键单击),然后选择 Get Info

  3. 选择 Access Control 选项卡。

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

    注意

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

    • 使用 SSH 而不是 HTTPS 连接 CodeCommit。有关更多信息,请参阅对于 Linux, macOS, or Unix 上的 SSH 连接

    • 在 Keychain Access 实用程序中,在 git-codecommit.us-east-2.amazonaws.comAccess Control (访问控制) 选项卡上,选择 Allow all applications to access this item (access to this item is not restricted) (允许应用程序访问此项(对此项的访问不受限制)) 选项。这将阻止弹出窗口,但凭证终究会到期(平均而言,大约需要 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 实用程序,后者使用了 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 configure 命令,并将这些值更改为适合该区域的值。有关更多信息,请参阅步骤 1:CodeCommit 初始配置

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

    1. 打开 Control Panel (控制面板),选择 Credential Manager (凭证管理器),并删除为 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 转义或百分号编码)。