

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

# 对凭证助手和 HTTPS 连接进行故障排除 AWS CodeCommit
<a name="troubleshooting-ch"></a>

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

**注意**  
尽管证书助手是支持 CodeCommit 使用联合访问权限、身份提供商或临时证书进行连接的方法，但推荐的方法是安装和使用该**git-remote-codecommit**实用程序。有关更多信息，请参阅 [使用的 HTTPS 连接 AWS CodeCommit 的设置步骤 git-remote-codecommit](setting-up-git-remote-codecommit.md)。

**Topics**
+ [在运行 `git config` 命令来配置凭证助手时，收到错误](#troubleshooting-os-syn1)
+ [尝试克隆存储库时出现读取用户名错误](#troubleshooting-gitconfig1)
+ [在 Windows 中使用凭证辅助程序时返回的“找不到命令”错误](#troubleshooting-py3)
+ [当我连接到 CodeCommit 存储库时，系统会提示我输入用户名](#troubleshooting-ae1)
+ [macOS 版 Git：我成功配置了凭证助手，但在访问我的存储库时被系统拒绝 (403)](#troubleshooting-macoshttps)
+ [Windows 版 Git：我安装了 Windows 版 Git，但在访问我的存储库时被系统拒绝 (403)](#troubleshooting-windowshttps)

## 在运行 `git config` 命令来配置凭证助手时，收到错误
<a name="troubleshooting-os-syn1"></a>

**问题：**当你尝试运行 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 $@'`

## 尝试克隆存储库时出现读取用户名错误
<a name="troubleshooting-gitconfig1"></a>

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

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

## 在 Windows 中使用凭证辅助程序时返回的“找不到命令”错误
<a name="troubleshooting-py3"></a>

**问题：**更新 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
```

**可能的修复措施：**您可以执行下列操作之一来解决此问题：
+ 使用 Python 和 pip 而不是 MSI AWS CLI 在 Windows 上安装和配置。有关更多信息，请参阅[在 Windows AWS CLI 上安装 Python、pip 等](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#awscli-install-windows-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 存储库时，系统会提示我输入用户名
<a name="troubleshooting-ae1"></a>

**问题：**当您尝试使用凭证助手与 CodeCommit 存储库通信时，会出现一条消息，提示您输入用户名。

**可能的修复方法：** AWS 配置您的配置文件或确保您使用的配置文件是您为使用而配置的配置文件 CodeCommit。有关设置的更多信息，请参阅[使用凭证助手设置与 Linux、macOS 或 Unix 上 AWS CodeCommit 存储库的 HTTPS 连接的 AWS CLI 步骤](setting-up-https-unixes.md)或[使用 AWS CLI 凭据助手在 Windows 上与 Windows 上的 AWS CodeCommit 存储库进行 HTTPS 连接的设置步骤](setting-up-https-windows.md)。有关 IAM、访问密钥和秘密密钥的更多信息，请参阅[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)和[如何获取凭证？](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials)。

## macOS 版 Git：我成功配置了凭证助手，但在访问我的存储库时被系统拒绝 (403)
<a name="troubleshooting-macoshttps"></a>

**问题：**在 macOS 上，凭证助手似乎无法正常访问或使用您的凭证。这可能是由以下两种原因导致的：
+  AWS CLI 的配置与存储库所在的存储库 AWS 区域 不同。
+ Keychain Access 实用程序保存的凭证已过期。

**可能的修复方法：**要验证是否为正确的区域配置了，请运行**aws configure**命令并查看显示的信息。 AWS CLI 如果 CodeCommit存储库与显示的存储库 AWS 区域 不同 AWS CLI，则必须运行**aws configure**命令并将值更改为适合该区域的值。有关更多信息，请参阅 [步骤 1：的初始配置 CodeCommit](setting-up-https-unixes.md#setting-up-https-unixes-account)。

 在 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 配置文件。

1. 要编辑 Git 配置文件，请使用纯文本编辑器或运行以下命令：

   ```
   nano /usr/local/git/etc/gitconfig
   ```

1. 使用以下任一策略修改配置：
   + 注释掉或删除包含 `helper = osxkeychain` 的凭证部分。例如：

     ```
     # helper = osxkeychain
     ```
   + 更新 `aws credential helper` 和 `osxkeychain` 凭证助手部分以包含上下文。例如，`osxkeychain`if 用于对以下对象进行身份验证 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 将使用凭证助手。
   + 在凭证助手之前添加一个空字符串助手。例如，要在 CLI 中使用名为*CodeCommitProfile*的配置文件时不使用`osxkeychain`助手：

     ```
     [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 查找它。)

1. 搜索存储库`git-codecommit.us-east-2.amazonaws.com`并将其*us-east-2*替换为存储库 AWS 区域 所在的位置。突出显示该行，打开上下文菜单 (右键单击)，然后选择 **Get Info**。

1. 选择 **Access Control** 选项卡。

1. 在 **Confirm before allowing access (运行访问前进行确认)** 中，选择 `git-credential-osxkeychain`，然后选择减号将它从列表中删除。
**注意**  
从列表中删除 `git-credential-osxkeychain` 后，您在每次运行 Git 命令时都会看到一个对话框。选择**拒绝**以继续。如果不希望显示弹出对话框，可考虑下面几种替代选项：  
 CodeCommit 使用 SSH 或 Git 凭据进行连接，而不是使用 HTTPS 的凭据助手进行连接。有关更多信息，请参阅[适用于 Linux、macOS 或 Unix 上的 SSH 连接](setting-up-ssh-unixes.md)和[适用于使用 Git 凭证的 HTTPS 用户的设置](setting-up-gc.md)。
在 Keychain Access 实用程序中，在 `git-codecommit.us-east-2.amazonaws.com` 的**访问控制**选项卡上，选择**允许所有应用程序访问此项目（对此项目的访问不受限制）**选项。这将阻止弹出窗口，但凭证终究会到期（平均而言，大约需要 15 分钟），然后会出现 403 错误消息。如果发生这种情况，您必须删除密钥链项才能恢复功能。
安装默认不使用密钥链的 Git 版本。
考虑制定一个删除密钥链项的脚本解决方案。要查看社区生成的脚本解决方案示例，请参阅[中的 ](integrations.md#integrations-community-code)定期删除 OS X Certificate Store 中缓存凭证的 Mac OS X 脚本[产品和服务集成](integrations.md)。

如果要完全阻止 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 配置](https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)和 [Stack Overflow 上的此文章](https://stackoverflow.com/questions/16052602/disable-git-credential-osxkeychain)。

## Windows 版 Git：我安装了 Windows 版 Git，但在访问我的存储库时被系统拒绝 (403)
<a name="troubleshooting-windowshttps"></a>

**问题：**在 Windows 上，凭证辅助程序似乎无法正常访问或使用您的凭证。这可能是由多种原因导致的：
+  AWS CLI 的配置与存储库所在的存储库 AWS 区域 不同。
+ 默认情况下，适用于 Windows 的 Git 会安装一个 Git 凭据管理器实用程序，该实用程序与使用 AWS 凭据助手的 CodeCommit 连接不兼容。安装后，它会导致与存储库的连接失败，即使证书助手已安装 AWS CLI 并配置为与存储库的连接。 CodeCommit
+ 某些版本的 Windows 版 Git 不完全符合 [RFC 2617](https://tools.ietf.org/html/rfc2617#page-5) 和 [RFC 4559](https://tools.ietf.org/html/rfc4559#page-2) 标准，这可能会导致 Git 凭证和 AWS CLI随附的凭证辅助程序出现问题。有关更多信息，请参阅 [Version 2.11.0(3) does not ask for username/password](https://github.com/git-for-windows/git/issues/1034)。

**可能的修复方法：**
+ 如果您尝试使用附带的凭证帮助器 AWS CLI，请考虑通过 HTTPS 连接 Git 凭证，而不是使用凭证帮助器。与 AWS CodeCommit凭证助手不同，为 IAM 用户配置的 Git 凭证与 Windows 版 Git Credential Manager 兼容。有关更多信息，请参阅 [适用于使用 Git 凭证的 HTTPS 用户](setting-up-gc.md)。

  如果要使用凭证助手来验证配置是否正确 AWS 区域，请运行**aws configure**命令并查看显示的信息。 AWS CLI 如果 CodeCommit 存储库与显示的存储库 AWS 区域 不同 AWS CLI，则必须运行**aws configure**命令并将值更改为适合该区域的值。有关更多信息，请参阅 [步骤 1：的初始配置 CodeCommit](setting-up-https-windows.md#setting-up-https-windows-account)。
+ 如果可能，请卸载并重新安装 Windows 版 Git。在安装 Windows 版 Git 时，清除安装 Git Credential Manager 实用程序选项的复选框。该凭证管理器与 AWS CodeCommit的凭证辅助程序不兼容。如果安装了 Git Credential Manager 或其他凭证管理实用程序，但不想卸载它，也可以修改 `.gitconfig` 文件并为 CodeCommit 添加特定的凭证管理：

  1. 打开 “**控制面板”**，选择 “**凭据管理器**”，然后删除所有存储的凭据。 CodeCommit

  1. 用任意纯文本编辑器（如“记事本”）打开您的 `.gitconfig` 文件。
**注意**  
如果使用多个 Git 配置文件，则可能同时存在本地和全局 `.gitconfig` 文件。请务必编辑相应的文件。

  1. 向您的 `.gitconfig` 文件添加以下部分：

     ```
     [credential "https://git-codecommit.*.amazonaws.com"]
         helper = !aws codecommit credential-helper $@ 
         UseHttpPath = true
     ```

  1. 保存文件，打开一个新的命令行会话，再次尝试连接。

  如果您想在连接到存储库 AWS 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 转义或[百分号编码](https://en.wikipedia.org/wiki/Percent-encoding)）。