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

Amazon CodeCommit 不再向新客户提供。 Amazon CodeCommit 的现有客户可以继续正常使用该服务。了解更多

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

对证书助手和与的HTTPS连接进行故障排除 Amazon CodeCommit

当您使用 Amazon CLI 和HTTPS附带的凭证帮助程序连接到 CodeCommit 存储库时,以下信息可以帮助您解决常见问题。

注意

尽管证书助手是支持 CodeCommit 使用联合访问权限、身份提供商或临时证书进行连接的方法,但推荐的方法是安装和使用该git-remote-codecommit实用程序。有关更多信息,请参阅 Amazon CodeCommit 与的HTTPS连接的设置步骤 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 $@'

尝试克隆存储库时看到读取用户名时出现错误

问题:当您尝试使用凭证帮助程序克隆存储库时,会看到一条错误消息,指出系统无法读取存储库URL的用户名。

可能的修复:此错误的最常见原因是您的计算机上未正确创建或配置.gitconfig 文件。打开您的.gitconfig 文件并确保正确设置了凭证助手。如果您使用的是运行 Linux、macOS 或 Unix 的计算机,还要确保为您的系统$HOME 正确设置了的值。

在 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

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

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

  • 手动编辑 .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 实用程序保存的凭证已过期。

可能的修复方法:要验证是否为正确的区域配置了,请运行aws configure命令并查看显示的信息。 Amazon CLI 如果 CodeCommit存储库与显示的存储库 Amazon Web Services 区域 不同 Amazon CLI,则必须运行aws configure命令并将值更改为适合该区域的值。有关更多信息,请参阅 步骤 1:CodeCommit 的初始配置

在 OS X 和 macOS 上发布的 Git 默认版本使用 Keychain Access 实用程序来保存生成的凭证。出于安全考虑,为访问 CodeCommit 存储库而生成的密码是临时的,因此存储在钥匙串中的证书将在大约 15 分钟后停止工作。如果您仅使用访问 Git CodeCommit,请尝试以下操作:

  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 凭证助手部分以包含上下文。例如,osxkeychainif 用于对以下对象进行身份验证 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 将使用凭证助手。

    • 在凭证助手之前添加一个空字符串助手。例如,在使用名为的配置文件时不使用osxkeychain助手 CodeCommitProfile 用CLI:

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

      如果您想将所有配置文件排除在外,也可以将空字符串帮助行后面的行配置为不匹配 CodeCommit :

      helper = !aws codecommit credential-helper $@

    或者,如果您希望继续使用 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 命令时都会看到一个对话框。选择拒绝以继续。如果不希望显示弹出对话框,可考虑下面几种替代选项:

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

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

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

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

  • 默认情况下,适用于 Windows 的 Git 会安装一个 Git 凭据管理器实用程序,该实用程序与使用 Amazon 凭据助手的 CodeCommit 连接不兼容。安装后,它会导致与存储库的连接失败,即使证书助手已安装 Amazon CLI 并配置为与存储库的连接。 CodeCommit

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

可能的修复措施:

  • 如果您正在尝试使用附带的凭证帮助器 Amazon CLI,请考虑使用 Git 凭据进行连接,HTTPS而不是使用凭证帮助器。为您的IAM用户配置的 Git 凭据与适用于 Windows 的 Git 凭据管理器兼容,这与的凭据助手不同。 Amazon CodeCommit有关更多信息,请参阅 适用于使用 Git 凭证的 HTTPS 用户

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

  • 如果可能,请卸载并重新安装 Windows 版 Git。在安装 Windows 版 Git 时,清除安装 Git Credential Manager 实用程序选项的复选框。该凭证管理器与 Amazon CodeCommit的凭证辅助程序不兼容。如果您安装了 Git 凭据管理器或其他凭据管理实用工具,但又不想将其卸载,则可以修改.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 时使用凭证助手,在连接到其他托管 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转义或百分比编码)。