可通过SSH连接CodeCommit但执行git clone时报公钥权限被拒
问题根因及操作差异说明
SSH直连测试和git clone操作的底层差异
- 调用链路不同:直接执行
ssh git-codecommit.eu-west-2.amazonaws.com时,会调用当前shell环境的默认SSH程序,读取当前环境变量对应的用户目录下的.ssh/config配置,你提前配置的IAM密钥ID、私钥路径都会正常生效,因此可以正常连通。而git执行SSH操作时,会优先调用git自带的SSH客户端(比如Git for Windows内置的MinGW SSH),或git配置中指定的SSH程序,继承的是git进程的环境变量,两者读取的配置路径、使用的SSH二进制文件可能完全不同。 - 环境变量优先级不同:企业域环境下经常会修改默认用户的
HOME环境变量,普通SSH会话读取的是正确的用户目录,而git进程可能读取到被篡改的HOME路径,无法匹配到你写的SSH配置,导致克隆时没有携带正确的私钥和IAM密钥ID,触发公钥校验失败。
可行解决方案
- 手动指定git使用系统默认的SSH客户端,执行命令:
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe"
指定后git会调用你测试连通性时用的同一个SSH程序,共享同一份配置。 - 检查git环境的
HOME路径,在Git Bash中执行echo $HOME,确认输出路径为你的Windows用户根目录(如C:/Users/你的用户名),如果路径错误,手动在系统环境变量中新增HOME变量,值为你的用户根目录。 - 如需进一步定位问题,可执行带调试日志的克隆命令,查看SSH握手过程的具体报错:
GIT_SSH_COMMAND="ssh -v" git clone ssh://git-codecommit.eu-west-2.amazonaws.com/v1/repos/<repo name>
内容的提问来源于stack exchange,提问作者Ed Eastwood
相关产品推荐
相关产品推荐

