對憑據幫助程序和 HTTPS 連接進行故障排除AWS CodeCommit - AWS CodeCommit

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

對憑據幫助程序和 HTTPS 連接進行故障排除AWS CodeCommit

下列資訊可幫助您對使用隨附的登入資料協助程式來解決常見問題進行故障診斷AWS CLI和 HTTPS 連接到 CodeCommit 存儲庫。

注意

雖然登入資料協助程式是可支援使用聯合存取、身分供應商或臨時性登入資料連線到 CodeCommit 的方法,但建議採用的方法是安裝並使用git-remote-codecommit公用程式。如需詳細資訊,請參閱 HTTPS 連線的設定步驟AWS CodeCommit與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 $@'

我在 Windows 中使用登入資料協助程式時發生找不到命令的錯誤

問題:更新AWSCLI,登入資料協助程式到 CodeCommit 儲存庫的連線失敗,並出現aws codecommit credential-helper $@ get: aws: command not found

原因:此錯誤最常見的原因是您的AWSCLI 版本已更新到使用 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 安裝和設定 AWS CLI,而不是使用 MSI。如需詳細資訊,請參閱在 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 的設定。如需設定的詳細資訊,請參閱HTTPS 連線的設定步驟AWS CodeCommitLinux、MacOS 或 Unix 上的儲存庫AWS CLI憑證助手HTTPS 連線的設定步驟AWS CodeCommit使用視窗上的儲存庫AWS CLI憑證助手。如需 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 | 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

      在此配置中,Git 將使用osxkeychain幫助程序,當遠程主機匹配」https://github.com」以及遠程主機匹配時的憑據幫助程序」https://git-codecommit\.us-east-1\.amazonaws.com「。

    • 在憑據幫助程序之前包含一個空字符串幫助程序。例如:

      [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 命令時就會看到對話方塊。選擇 Deny (拒絕) 以繼續。如果您覺得快顯的干擾性太大,以下是一些替代選項:

如果想要讓 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 上的此文章

適用於窗口的 Git:我已安裝適用於 Windows 的 Git,但現在拒絕我存取儲存庫 (403)

問題:在 Windows 上,登入資料協助程式似乎未如預期存取或使用您的登入資料。這可能是因為不同的問題所導致:

  • 所以此AWS CLI配置為AWS 區域與儲存庫所在位置不同。

  • 在預設情況下,適用於 Windows 的 Git 會安裝 GCodeCommit 入資料管理工具,它與使用AWS登入資料協助程式。安裝時,它會導致與儲存庫的連線失敗,即使登入資料協助程式已隨AWS CLI並配置為 CodeCommit 的連接。

  • 某些版本的適用於 Windows 的 Git 登入資料可能無法完全符合 RFC 2617RFC 4559,這可能會導致 Git 登入資料和 AWS CLI 隨附的登入資料協助程式的問題。如需詳細資訊,請參閱版本 2.11.0(3) 未請求輸入使用者名稱/密碼

可能的修正:

  • 如果您嘗試使用 AWS CLI 隨附的登入資料協助程式,請考慮使用 Git 登入資料透過 HTTPS 連接,而不是使用登入資料協助程式。與適用於 Windows 的 Git 登入資料管理工具不同,與AWS CodeCommit。如需詳細資訊,請參閱 適用於使用 Git 認證的 HTTPS 使用者

    如果想要使用登入資料協助程式來驗證AWS CLI配置為正確的AWS 區域,執行aws configure命令,然後查看顯示的信息。如果 CodeCommit 存儲庫位於AWS 區域不同於顯示的AWS CLI,您必須執行aws configure命令並將值更改為適合該區域的值。如需詳細資訊,請參閱 步驟 1:初始配置CodeCommit

  • 如果可能,請解除安裝並重新安裝適用於 Windows 的 Git。安裝適用於 Windows 的 Git 時,請清除在安裝 Git Credential Manager 公用程式時所用之選項的核取方塊。此 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. 儲存檔案,然後開啟新的命令列工作階段,之後再次嘗試連接。

    如果您想要使用登入資料協助程式來AWS CodeCommit連接到 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 逸出或 % 編碼)。