You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动