

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對登入資料協助程式和 HTTPS 連線進行故障診斷 AWS CodeCommit
<a name="troubleshooting-ch"></a>

當您使用 AWS CLI 和 HTTPS 隨附的登入資料協助程式連線至 CodeCommit 儲存庫時，下列資訊可協助您疑難排解常見問題。

**注意**  
雖然登入資料協助程式是使用聯合存取、身分提供者或臨時登入資料連線至 CodeCommit 的支援方法，但建議的方法是安裝和使用 **git-remote-codecommit** 公用程式。如需詳細資訊，請參閱[AWS CodeCommit 使用 git-remote-codecommit 對 HTTPS 連線的設定步驟](setting-up-git-remote-codecommit.md)。

**Topics**
+ [我在執行 `git config`命令以設定登入資料協助程式時收到錯誤](#troubleshooting-os-syn1)
+ [嘗試複製儲存庫時，我看到讀取使用者名稱時發生錯誤](#troubleshooting-gitconfig1)
+ [我在 Windows 中使用登入資料協助程式時發生找不到命令的錯誤](#troubleshooting-py3)
+ [當我連線到 CodeCommit 儲存庫時，系統會提示我輸入使用者名稱](#troubleshooting-ae1)
+ [Git for macOS：我已成功設定登入資料協助程式，但現在我無法存取儲存庫 (403)](#troubleshooting-macoshttps)
+ [適用於 Windows 的 Git：我已安裝適用於 Windows 的 Git，但現在拒絕我存取儲存庫 (403)](#troubleshooting-windowshttps)

## 我在執行 `git config`命令以設定登入資料協助程式時收到錯誤
<a name="troubleshooting-os-syn1"></a>

**問題：**當您嘗試執行 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 $@'`

## 嘗試複製儲存庫時，我看到讀取使用者名稱時發生錯誤
<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
```

**可能的修正：**您可執行以下其中一項來解決此問題：
+ 在 Windows AWS CLI 上使用 Python 和 pip 而非 MSI 安裝和設定 。如需詳細資訊，請參閱在 [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 的設定檔。如需設定的詳細資訊，請參閱[使用 AWS CLI 登入資料協助程式設定 HTTPS 連線至 Linux、macOS 或 Unix 上 AWS CodeCommit 儲存庫的步驟](setting-up-https-unixes.md)或[使用 AWS CLI 登入資料協助程式在 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)

## Git for macOS：我已成功設定登入資料協助程式，但現在我無法存取儲存庫 (403)
<a name="troubleshooting-macoshttps"></a>

**問題：**在 macOS 上，登入資料協助程式似乎未如預期般存取或使用登入資料。這可能是因為兩個不同的問題所導致：
+  AWS CLI 設定為與儲存庫存在的 AWS 區域 不同的 。
+ Keychain Access 公用程式所儲存的登入資料那時已過期。

**可能的修正：**若要驗證 AWS CLI 是否已針對正確的區域設定 ，請執行 **aws configure**命令，並檢閱顯示的資訊。如果 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 分鐘後停止運作。如果您只使用 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 組態檔案。

1. 若要編輯 Git 設定檔，請使用純文字編輯器或執行下列命令：

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

1. 使用下列其中一個策略修改組態：
   + 註解或刪除包含 的登入資料區段`helper = osxkeychain`。例如：

     ```
     # helper = osxkeychain
     ```
   + 同時更新 `aws credential helper`和 `osxkeychain`登入資料協助程式區段，以取得內容。例如，如果 `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`」時，將使用登入資料協助程式。
   + 在登入資料協助程式之前包含空字串協助程式。例如，使用名為 *CodeCommitProfile* 的設定檔搭配 CLI 時，若要不使用`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 命令時就會看到對話方塊。選擇 **Deny (拒絕)** 以繼續。如果您覺得快顯的干擾性太大，以下是一些替代選項：  
使用 SSH 或 Git 登入資料而不是登入資料協助程式搭配 HTTPS 連線至 CodeCommit。如需詳細資訊，請參閱[針對 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 版本。
考慮用於刪除金鑰鏈項目的一個指令碼解決方案。若要檢視指令碼解決方案的社群產生範例，請參閱《》中的 [OS X 憑證存放區中的定期刪除快取登入資料的 Mac OS X 指令碼](integrations.md#integrations-community-code)[產品和服務整合](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 區域 不同的 。
+ 根據預設，Git for Windows 會安裝與使用登入資料協助程式的 CodeCommit 連線不相容的 Git AWS Credential Manager 公用程式。安裝後，即使登入資料協助程式已搭配 安裝， 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隨附的登入資料協助程式的問題。如需詳細資訊，請參閱[版本 2.11.0(3) 未請求輸入使用者名稱/密碼](https://github.com/git-for-windows/git/issues/1034)。

**可能的修正：**
+ 如果您嘗試使用 隨附的登入資料協助程式 AWS CLI，請考慮透過 HTTPS 與 Git 登入資料連線，而不是使用登入資料協助程式。為您的 IAM 使用者設定的 Git 登入資料與適用於 Windows 的 Git Credential Manager 相容，不同於 的登入資料協助程式 AWS CodeCommit。如需詳細資訊，請參閱[對於使用 Git 登入資料的 HTTPS 使用者](setting-up-gc.md)。

  如果您想要使用登入資料協助程式，請驗證 AWS CLI 是否設定為正確 AWS 區域、執行 **aws configure**命令，並檢閱顯示的資訊。如果 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 公用程式時所用之選項的核取方塊。此 Credential Manager 與 AWS CodeCommit的登入資料協助程式不相容。如果您安裝了 Git Credential Manager 或其他登入資料管理公用程式，而且不想解除安裝它，您可以修改`.gitconfig`檔案並新增 CodeCommit 的登入資料管理：

  1. 開啟**控制面板**，選擇 **Credential Manager**，然後移除 CodeCommit 的任何預存登入資料。

  1. 在任何純文字編輯器 (例如記事本) 中開啟 `.gitconfig` 檔案。
**注意**  
如果您使用多個 Git 設定檔，您可能同時有本機和全域 `.gitconfig` 檔案。請務必編輯適當的檔案。

  1. 將以下區段新增到您的 `.gitconfig` 檔案：

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

  1. 儲存檔案，然後開啟新的命令列工作階段，之後再次嘗試連接。

  如果您想要在連線至 CodeCommit 儲存庫 AWS CodeCommit 時針對 使用登入資料協助程式，以及在連線至其他託管儲存庫時用於另一個登入資料管理系統，例如 GitHub 儲存庫，您也可以使用此方法。

  若要將使用的登入資料協助程式重設為預設值，您可以在執行 **git config** 命令時使用 **--system** 選項，而不是 **--global** 或 **--local**。
+ 如果是在 Windows 電腦上使用 Git 登入資料，您可以嘗試解決任何 RFC 不相符的問題，方法是在連線字串中包括您的 Git 登入資料使用者名稱。例如，若要解決此問題，並在美國東部 （俄亥俄） 區域中複製名為 *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))。