SSH连接正常但Windows下Git克隆提示Permission denied问题求助
Windows下Git SSH克隆失败但直接SSH登录成功的问题排查
环境说明
- Windows作为宿主机,CentOS虚拟机内运行基于Debian的Git Docker容器
- 容器仅允许SSH密钥认证,已禁用用户名密码登录
- 可正常完成以下SSH连接:Windows→CentOS、Windows→Git容器、CentOS→Git容器
- Windows和CentOS的SSH配置文件(Windows路径为
C:\Users\<用户名>\.ssh\config,CentOS路径为~/.ssh/config)内容基本一致:
Host git_name HostName <ip_address_of_CentOS> Port <port_mapped_to_container> User <git_username> IdentityFile <path_to_private_key>
问题现象
- 在Windows和CentOS中执行
ssh git_name都能成功登录Git容器 - 但执行Git克隆命令时,CentOS可正常克隆,Windows报错:
Cloning into 'repo_folder'... <successfully_resolved_user@ip>: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
- 尝试两种克隆语法均得到相同错误:
git clone ssh://git_name/example_path/repo_foldergit clone git_name:/example_path/repo_folder
可能原因与解决方法
1. Git使用的SSH客户端与系统默认不一致
Windows上的Git通常自带一套OpenSSH客户端,和Windows系统自带的OpenSSH不是同一个程序,导致两者读取的SSH配置、密钥路径不匹配。
- 解决方法:
- 分别在Git Bash和PowerShell/CMD中执行
ssh -V,对比版本确认是否为不同客户端 - 配置Git使用系统自带的SSH:
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe" - 若坚持使用Git自带SSH,需确保Git Bash的
~/.ssh目录下有对应私钥,且权限符合要求
- 分别在Git Bash和PowerShell/CMD中执行
2. SSH配置文件的路径格式错误
Windows路径分隔符为\,但Git使用的SSH客户端可能无法识别该格式,或路径未正确转义。
- 解决方法:
- 将
IdentityFile的路径改为正斜杠格式,例如C:/Users/xxx/.ssh/id_rsa - 若私钥在默认的
.ssh目录下,可直接使用相对路径:IdentityFile ~/.ssh/id_rsa
- 将
3. 私钥文件权限过于宽松
SSH对私钥权限要求严格,Windows下若私钥被其他用户组读取,会被SSH客户端拒绝使用。
- 解决方法:
- 右键私钥文件→属性→安全→编辑,删除除当前用户外的所有权限条目
- 点击「高级」→禁用继承→将继承的权限转换为该对象的显式权限,最终只保留当前用户的「读取」权限
4. Git全局配置覆盖了SSH设置
Git全局配置中可能指定了特定的SSH密钥或命令,覆盖了SSH配置文件的规则。
- 解决方法:
- 执行
git config --global --list查看是否存在core.sshcommand相关配置,若有则删除:git config --global --unset core.sshCommand
- 执行
内容的提问来源于stack exchange,提问作者TajniakOsz
相关产品推荐
相关产品推荐

