Git无法通过私有SSH文件连接远程仓库问题求助
解决Git使用自定义
sshCommand推送时仓库识别失败的问题 首先明确你提到的小疑问:Git仓库并不强制要放在/var/www目录,只要你的SSH用户(这里是ubuntu)对目标目录有读写权限,放在服务器的任意合法路径下都可以,/var/www只是Web项目部署时的常见目录而已。
接下来分析你遇到的核心问题:你已经正确配置了core.sshCommand来指定自定义密钥:
git config core.sshCommand 'ssh -i ~/Documents/keydir/key.pem'
本地配置文件也生成了对应的条目,但尝试推送时无论怎么调整远程URL格式(带端口、不带端口、绝对路径/相对路径),都收到错误:
git push remote master fatal: 'remote' does not appear to be a git repository fatal: Could not read from remote repository.
且你已经确认服务器端的裸仓库myrepo.git确实存在于ubuntu用户的主目录下。
最终解决方法
你提到将本地Git版本(原2.5.4)和远程服务器的Git版本(原2.7.4)都升级到最新的2.16.1版本后,问题直接解决了。
问题根源推测
早期的Git版本(尤其是2.7.x及更早的版本)对core.sshCommand这个相对较新的功能支持可能存在兼容性缺陷:
- 本地旧版本Git在通过自定义
sshCommand发起连接时,可能没有正确传递仓库路径参数给远程服务器 - 远程旧版本Git在接收这种自定义SSH连接的请求时,可能无法正确解析传入的仓库路径,从而误判为非Git仓库
- 本地和远程版本差距过大(2.5.4 vs 2.7.4)也可能加剧了这种兼容性问题
补充小提醒
另外注意,标准的推送命令应该是git push origin master而不是git push remote master——这里的origin是你配置的远程仓库别名,remote并不是有效的远程名称。不过从你最终升级版本解决问题的结果来看,这个命令表述错误可能不是核心诱因,但日常使用还是要注意命令的准确性。
你的完整本地.git/config配置供参考:
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true sshCommand = ssh -i ~/Documents/keydir/key.pem [remote "origin"] url = ssh://ubuntu@myserver.com:22/home/ubuntu/mygit.git fetch = +refs/heads/*:refs/remotes/origin/*
内容的提问来源于stack exchange,提问作者mystic cola




