SSH 与 Amazon CodeCommit 的连接问题排查 - Amazon CodeCommit
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

SSH 与 Amazon CodeCommit 的连接问题排查

以下信息可帮助您排查在使用 SSH 连接到 CodeCommit 存储库时的常见问题。

访问错误:已将公有密钥成功上传到 IAM,但在 Linux、macOS 或 Unix 系统上进行连接时失败

问题:尝试连接到 SSH 端点以与 CodeCommit 存储库通信时,测试连接或克隆存储库的操作出现连接失败或连接被拒绝。

可能的修复措施:分配给 IAM 中公有密钥的 SSH 密钥 ID 可能未关联到您尝试的连接。您可能尚未配置配置文件、您可能无权访问配置文件、其他设置可能导致系统无法成功读取配置文件、您可能提供了错误的密钥 ID 或者您可能提供了 IAM 用户 ID 而不是密钥 ID。

您可以通过 IAM 控制台在 IAM 用户的配置文件中找到 SSH 密钥 ID:


                IAM 控制台中的 SSH 密钥 ID
注意

如果您上传了多个 SSH 密钥 ID,则按密钥 ID 的字母顺序(而不是按上传日期)列出密钥。请确保已复制与正确上传日期关联的密钥 ID。

尝试使用下面的命令测试连接:

ssh Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com

如果在确认连接后看到成功消息,说明您的 SSH 密钥 ID 是有效的。编辑配置文件,将您尝试的连接关联到 IAM 中的公有密钥。如果您不想编辑配置文件,可以在所有存储库连接前面加上 SSH 密钥 ID。例如,如果需要克隆名为 MyDemoRepo 的存储库,但不想修改与连接关联的配置文件,可以键入下面的命令:

git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

有关更多信息,请参阅适用于 Linux、macOS 或 Unix 上的 SSH 连接

访问错误:已将公有密钥成功上传到 IAM 并且 SSH 测试成功,但在 Windows 系统上进行连接时失败

问题:尝试使用 SSH 端点克隆 CodeCommit 存储库或与之通信时,出现一条错误消息,其中包含 No supported authentication methods available 字样。

可能的修复措施:导致该错误的最常见原因是您设置的某个 Windows 系统环境变量指示 Windows 在您尝试使用 SSH 时使用其他的程序。例如,您可能设置了 GIT_SSH 变量,将其指向了某个 PuTTY 工具集 (plink.exe)。这可能是一个旧式配置,或计算机上安装的一个或多个其他程序需要该配置。如果确定不需要该环境变量,可以打开系统属性来将其删除。

要解决这个问题,请打开 Bash 仿真器,再次尝试 SSH 连接,但包含 GIT_SSH_COMMAND="SSH" 作为前缀。例如,要使用 SSH 克隆存储库:

GIT_SSH_COMMAND="ssh" git clone ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

如果您的 Windows 版本要求在 Windows 命令行中通过 SSH 进行连接时必须将 SSH 密钥 ID 包含在连接字符串中,也可能会出现类似问题。尝试再次连接,这次请在命令中包含从 IAM 复制的 SSH 密钥 ID。例如:

git clone ssh://Your-SSH-Key-ID@git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo my-demo-repo

身份验证质询:连接到 CodeCommit 存储库时,无法确认主机的真实性

问题:尝试使用 SSH 端点与 CodeCommit 存储库通信时,出现一条警告消息,其中包含 The authenticity of host 'host-name' can't be established. 字样。

可能的修复措施:您的凭证设置可能不正确。按照适用于 Linux、macOS 或 Unix 上的 SSH 连接适用于 Windows 上的 SSH 连接 中的说明操作。

如果按照上述步骤操作后,问题仍然存在,可能是有人正在尝试实施中间人攻击。如果看到下面的消息,请键入 no 并按 Enter。

Are you sure you want to continue connecting (yes/no)?

确保 CodeCommit 连接的指纹和公有密钥与 SSH 设置主题中记录的指纹和公有密钥匹配,再继续连接。

CodeCommit 的公有指纹
服务器 加密哈希类型 指纹
git-codecommit.us-east-2.amazonaws.com MD5 a9:6d:03:ed:08:42:21:be:06:e1:e0:2a:d1:75:31:5e
git-codecommit.us-east-2.amazonaws.com SHA256 3lBlW2g5xn/NA2Ck6dyeJIrQOWvn7n8UEs56fG6ZIzQ
git-codecommit.us-east-1.amazonaws.com MD5 a6:9c:7d:bc:35:f5:d4:5f:8b:ba:6f:c8:bc:d4:83:84
git-codecommit.us-east-1.amazonaws.com SHA256 eLMY1j0DKA4uvDZcl/KgtIayZANwX6t8+8isPtotBoY
git-codecommit.us-west-2.amazonaws.com MD5 a8:68:53:e3:99:ac:6e:d7:04:7e:f7:92:95:77:a9:77
git-codecommit.us-west-2.amazonaws.com SHA256 0pJx9SQpkbPUAHwy58UVIq0IHcyo1fwCpOOuVgcAWPo
git-codecommit.eu-west-1.amazonaws.com MD5 93:42:36:ea:22:1f:f1:0f:20:02:4a:79:ff:ea:12:1d
git-codecommit.eu-west-1.amazonaws.com SHA256 tKjRkOL8dmJyTmSbeSdN1S8F/f0iql3RlvqgTOP1UyQ
git-codecommit.ap-northeast-1.amazonaws.com MD5 8e:a3:f0:80:98:48:1c:5c:6f:59:db:a7:8f:6e:c6:cb
git-codecommit.ap-northeast-1.amazonaws.com SHA256 Xk/WeYD/K/bnBybzhiuu4dWpBJtXPf7E30jHU7se4Ow
git-codecommit.ap-southeast-1.amazonaws.com MD5 65:e5:27:c3:09:68:0d:8e:b7:6d:94:25:80:3e:93:cf
git-codecommit.ap-southeast-1.amazonaws.com SHA256 ZIsVa7OVzxrTIf+Rk4UbhPv6Es22mSB3uTBojfPXIno
git-codecommit.ap-southeast-2.amazonaws.com MD5 7b:d2:c1:24:e6:91:a5:7b:fa:c1:0c:35:95:87:da:a0
git-codecommit.ap-southeast-2.amazonaws.com SHA256 nYp+gHas80HY3DqbP4yanCDFhqDVjseefVbHEXqH2Ec
git-codecommit.ap-southeast-3.amazonaws.com MD5 64:d9:e0:53:19:4f:a8:91:9a:c3:53:22:a6:a8:ed:a6
git-codecommit.ap-southeast-3.amazonaws.com SHA256 ATdkGSFhpqIu7RqUVT/1RZo6MLxxxUW9NoDVMbAc/6g
git-codecommit.me-central-1.amazonaws.com MD5 bd:fa:e2:f9:05:84:d6:39:6f:bc:d6:8d:fe:de:61:76
git-codecommit.me-central-1.amazonaws.com SHA256 grceUDWubo4MzG1NoaKZKUfrgPvfN3ijliOnQr1lTZA
git-codecommit.eu-central-1.amazonaws.com MD5 74:5a:e8:02:fc:b2:9c:06:10:b4:78:84:65:94:22:2d
git-codecommit.eu-central-1.amazonaws.com SHA256 MwGrkiEki8QkkBtlAgXbYt0hoZYBnZF62VY5RzGJEUY
git-codecommit.ap-northeast-2.amazonaws.com MD5 9f:68:48:9b:5f:fc:96:69:39:45:58:87:95:b3:69:ed
git-codecommit.ap-northeast-2.amazonaws.com SHA256 eegAPQrWY9YsYo9ZHIKOmxetfXBHzAZd8Eya53Qcwko
git-codecommit.sa-east-1.amazonaws.com MD5 74:99:9d:ff:2b:ef:63:c6:4b:b4:6a:7f:62:c5:4b:51
git-codecommit.sa-east-1.amazonaws.com SHA256 kW+VKB0jpRaG/ZbXkgbtMQbKgEDK7JnISV3SVoyCmzU
git-codecommit.us-west-1.amazonaws.com MD5 3b:76:18:83:13:2c:f8:eb:e9:a3:d0:51:10:32:e7:d1
git-codecommit.us-west-1.amazonaws.com SHA256 gzauWTWXDK2u5KuMMi5vbKTmfyerdIwgSbzYBODLpzg
git-codecommit.eu-west-2.amazonaws.com MD5 a5:65:a6:b1:84:02:b1:95:43:f9:0e:de:dd:ed:61:d3
git-codecommit.eu-west-2.amazonaws.com SHA256 r0Rwz5k/IHp/QyrRnfiM9j02D5UEqMbtFNTuDG2hNbs
git-codecommit.ap-south-1.amazonaws.com MD5 da:41:1e:07:3b:9e:76:a0:c5:1e:64:88:03:69:86:21
git-codecommit.ap-south-1.amazonaws.com SHA256 hUKwnTj7+Xpx4Kddb6p45j4RazIJ4IhAMD8k29itOfE
git-codecommit.ap-south-2.amazonaws.com MD5 bc:cc:9f:15:f8:f3:58:a2:68:65:21:e2:23:71:8d:ce
git-codecommit.ap-south-2.amazonaws.com SHA256 Xe0CyZEOvgR5Xa2YUGqf+jn8/Ut7l7nX/CmslSFNEig
git-codecommit.ca-central-1.amazonaws.com MD5 9f:7c:a2:2f:8c:b5:74:fd:ab:b7:e1:fd:af:46:ed:23
git-codecommit.ca-central-1.amazonaws.com SHA256 Qz5puafQdANVprLlj6r0Qyh4lCNsF6ob61dGcPtFS7w
git-codecommit.eu-west-3.amazonaws.com MD5 1b:7f:97:dd:d7:76:8a:32:2c:bd:2c:7b:33:74:6a:76
git-codecommit.eu-west-3.amazonaws.com SHA256 uw7c2FL564jVoFgtc+ikzILnKBsZz7t9+CFdSJjKbLI
git-codecommit.us-gov-west-1.amazonaws.com MD5 9f:6c:19:3b:88:cd:e8:88:1b:9c:98:6a:95:31:8a:69
git-codecommit.us-gov-west-1.amazonaws.com SHA256 djXQoSIFcg8vHe0KVH1xW/gOF9X37tWTqu4Hkng75x4
git-codecommit.us-gov-east-1.amazonaws.com MD5 00:8d:b5:55:6f:05:78:05:ed:ea:cb:3f:e6:f0:62:f2
git-codecommit.us-gov-east-1.amazonaws.com SHA256 fVb+R0z7qW7minenW+rUpAABRCRBTCzmETAJEQrg98
git-codecommit.eu-north-1.amazonaws.com MD5 8e:53:d8:59:35:88:82:fd:73:4b:60:8a:50:70:38:f4
git-codecommit.eu-north-1.amazonaws.com SHA256 b6KSK7xKq+V8jl7iuAcjqXsG7zkqoUZZmmhYYFBq1wQ
git-codecommit.me-south-1.amazonaws.com MD5 0e:39:28:56:d5:41:e6:8d:fa:81:45:37:fb:f3:cd:f7
git-codecommit.me-south-1.amazonaws.com SHA256 O+NToCGgjrHekiBuOl0ad7ROGEsz+DBLXOd/c9wc0JU
git-codecommit.ap-east-1.amazonaws.com MD5 a8:00:3d:24:52:9d:61:0e:f6:e3:88:c8:96:01:1c:fe
git-codecommit.ap-east-1.amazonaws.com SHA256 LafadYwUYW8hONoTRpojbjNs9IRnbEwHtezD3aAIBX0
git-codecommit.cn-north-1.amazonaws.com.cn MD5 11:7e:2d:74:9e:3b:94:a2:69:14:75:6f:5e:22:3b:b3
git-codecommit.cn-north-1.amazonaws.com.cn SHA256 IYUXxH2OpTDsyYMLIp+JY8CTLS4UX+ZC5JVZXPRaxc8
git-codecommit.cn-northwest-1.amazonaws.com.cn MD5 2e:a7:fb:4c:33:ac:6c:f9:aa:f2:bc:fb:0a:7b:1e:b6
git-codecommit.cn-northwest-1.amazonaws.com.cn SHA256 wqjd6eHd0+mOBx+dCNuL0omUoCNjaDtZiEpWj5TmCfQ
git-codecommit.eu-south-1.amazonaws.com MD5 b9:f6:5d:e2:48:92:3f:a9:37:1e:c4:d0:32:0e:fb:11
git-codecommit.eu-south-1.amazonaws.com SHA256 lyXrWbCg3uQmJrl1XxB/ASR7ugW1Ysf5yzYOJbudHsI
git-codecommit.ap-northeast-3.amazonaws.com MD5 25:17:40:da:b9:d4:18:c3:b6:b3:fb:ed:1c:20:fe:29
git-codecommit.ap-northeast-3.amazonaws.com SHA256 2B815B9F0AvwLnRxSVxUz4kDYmtEQUGGdQYP8OQLXhA
git-codecommit.af-south-1.amazonaws.com MD5 21:a0:ba:d7:c1:d1:b5:39:98:8d:4d:7c:96:f5:ca:29
git-codecommit.af-south-1.amazonaws.com SHA256 C34ji3x/cnsDZjUpyNGXdE5pjHYimqJrQZ3leTgqJHM
git-codecommit.il-central-1.amazonaws.com MD5 04:74:89:16:98:7a:61:b1:69:46:42:3c:d1:b4:ac:a9
git-codecommit.il-central-1.amazonaws.com SHA256 uFxhp51kUWhleTLeYbxQVYm4RnNLNZ5Dbdm1cgdSl/8

IAM 错误:尝试向 IAM 添加公有密钥时,出现“格式无效”错误

问题:在 IAM 中,设置对 CodeCommit 使用 SSH 连接,在尝试添加公有密钥时,出现一条错误消息,其中包含 Invalid format 字样。

可能的修复措施:IAM 要求公有密钥必须采用 ssh-rsa 格式或 PEM 格式进行编码。它仅接受 OpenSSH 格式的公有密钥,并且具有《IAM 用户指南》中的将 SSH 密钥与 CodeCommit 配合使用所述的其他要求。如果提供其他格式的公有密钥,或者密钥包含的位数不够,就会出现此错误。

有关 IAM 中的 SSH 密钥要求的更多信息,请参阅《IAM 用户指南》中的将 SSH 密钥与 CodeCommit 配合使用

我需要使用 SSH 凭证访问多个 Amazon Web Services 账户中的 CodeCommit 存储库

问题:我想在多个 Amazon Web Services 账户中设置对 CodeCommit 存储库的 SSH 访问权限。

可能的修复措施:您可以为每个 Amazon Web Services 账户创建唯一的 SSH 公有/私有密钥对,并使用每个密钥配置 IAM。然后,您可以使用与公有密钥关联的每个 IAM 用户 ID 的相关信息来配置您的 ~/.ssh/config 文件。例如:

Host codecommit-1 Hostname git-codecommit.us-east-1.amazonaws.com User SSH-KEY-ID-1 # This is the SSH Key ID you copied from IAM in Amazon Web Services account 1 (for example, APKAEIBAERJR2EXAMPLE1). IdentityFile ~/.ssh/codecommit_rsa # This is the path to the associated public key file, such as id_rsa. We advise creating CodeCommit specific _rsa files. Host codecommit-2 Hostname git-codecommit.us-east-1.amazonaws.com User SSH-KEY-ID-2 # This is the SSH Key ID you copied from IAM in Amazon Web Services account 2 (for example, APKAEIBAERJR2EXAMPLE2). IdentityFile ~/.ssh/codecommit_2_rsa # This is the path to the other associated public key file. We advise creating CodeCommit specific _rsa files.

在此配置中,您可以将“git-codecommit.us-east-1.amazonaws.com”替换为“codecommit-2”。例如,要克隆第二个 Amazon Web Services 账户中的存储库,请运行以下命令:

git clone ssh://codecommit-2/v1/repos/YourRepositoryName

要为存储库设置远程操作,请运行 git remote add。例如:

git remote add origin ssh://codecommit-2/v1/repos/YourRepositoryName

有关更多示例,请参阅这篇论坛帖子GitHub 上的这篇文章

Windows 上的 Git:尝试使用 SSH 进行连接时,Bash 仿真器或命令行卡住

问题:为 Windows 配置 SSH 访问并在命令行或终端中确认连接后,当尝试在命令提示符或 Bash 仿真器中 git pullgit pushgit clone 命令时,显示一条消息,指示服务器的主机密钥未缓存在注册表中,并且有关在缓存中存储密钥的提示卡住(不接受 y/n/return 输入)。

可能的修复措施:导致该错误的最常见原因是 Git 环境配置为使用 OpenSSH 以外的程序 (可能是 PuTTY) 进行身份验证。这会在某些配置中导致与缓存密钥有关的问题。要解决这个问题,请尝试以下操作之一:

  • 打开 Bash 仿真器,在 Git 命令前添加 GIT_SSH_COMMAND="ssh" 参数。例如,在尝试推送到存储库时,不要键入 git push,而是键入:

    GIT_SSH_COMMAND="ssh" git push
  • 如果已安装 PuTTY,请打开 PuTTY,在主机名(或 IP 地址)中,输入要访问的 CodeCommit 端点(例如 git-codecommit.us-east-2.amazonaws.com)。选择 Open(打开)。当出现 PuTTY 安全提醒的提示时,选择 Yes (是) 永久缓存密钥。

  • 重命名或删除不再使用的 GIT_SSH 环境变量。然后,打开新的命令提示符或 Bash 仿真器会话,再次尝试您的命令。

有关其他解决方案的信息,请参阅 Stack Overflow 上的 Git clone/pull continually freezing at Store key in cache

公有密钥格式在某些 Linux 发行版中需要规范化

问题:尝试配置公有-私有密钥对时,收到一个错误。

可能的修复措施:某些 Linux 发行版需要在 ~/.ssh/config 文件中添加额外的配置行,以指定公有密钥的可接受类型。有关更多信息,请参阅有关 PubkeyAcceptedKeyTypes 的具体发行版文档。

访问错误:连接到 CodeCommit 存储库时,SSH 公有密钥被拒绝

问题:尝试使用 SSH 端点与 CodeCommit 存储库通信时,出现一条错误消息,其中包含 Error: public key denied 字样。

可能的修复措施:导致出现此错误的最常见原因是您尚未完成 SSH 连接设置。请配置公有和私有 SSH 密钥对,然后将公有密钥与您的 IAM 用户相关联。有关配置 SSH 的更多信息,请参阅适用于 Linux、macOS 或 Unix 上的 SSH 连接适用于 Windows 上的 SSH 连接