将代码推送到远程仓库时出现“无法从远程仓库读取”的错误。

33

我找了一段时间,但我找不到解决我的问题的方法。

我有一个可以通过用户名git和本地git存储库连接到的服务器。
现在我想将本地存储库推送到新创建的服务器上的存储库。

这是我所做的:

  • /home/git/test.git中创建了一个git存储库
  • 将存储库初始化为裸库
  • 在本地机器上添加了远程存储库
    git remote add test ssh://git@serverIp:/home/git/test.git
  • 现在我执行了推送命令:
    git push test master

我总是得到以下错误信息:

fatal: could not read from remote repository

Please make sure you have the correct access rights
and the repository exists.

我正在本地 Windows 7 计算机上工作,想要上传到 Linux 服务器。
我可以使用 git 用户登录 ssh。 我也尝试使用相同的结果以 root 用户身份运行它(为了让事情一次性解决)。
我从未被要求输入 ssh password

我真的不知道我做错了什么。
在您将其称为重复内容之前,我为此问题进行了大量搜索,但似乎没有人谈论相同的问题。

更新:

  • "which git" 返回 /usr/bin/git
  • PATH echo 包括 /usr/bin
  • id_rsa 和 id_rsa.pub 文件都已设置好并且没有 Passphrase
  • ssh git@serverIp which git-receive-pack 也有效并返回 /usr/bin/git-receive-pack
  • ssh git@serverIp ls /home/git/test.git 有效
  • 所有相关目录都是 chmod 755
  • git 是存储库的所有者
  • auth.log 文件在尝试推送命令时没有新条目
  • GIT_TRACE=2 git push test master 返回:

    'C:\Program Files (x86)\PuTTY\plink.exe' '-batch' 'git@serverIp' 'git-receive-pack '\''/home/git/test.git'\''' fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.


Plink?你能试试用OpenSSH吗?(https://dev59.com/BnA85IYBdhLWcg3wBOtO#7697167,http://guides.beanstalkapp.com/version-control/git-on-windows.html) - VonC
2
什么,刚才发生了什么?我刚刚重新安装了Git,选择了openssh而不是putty,它可以轻松地将代码推送到远程仓库。 - user1090755
没错,我一开始没看到 plink,但我总是使用我的 git 安装中的 openssh。我已经更新了答案。 - VonC
如果Plink会降低功能,他们应该将其从选择列表中删除。非常感谢,我花了几天时间解决这个问题。 - user1090755
一个可能的原因是您的主目录拥有权/模式错误。我得到了Authentication refused: bad ownership or modes for directory /home/data/users/okopp - koppor
4个回答

17
在这种情况下,使用putty上的openssh是关键。

原始答案(调试提示)

我可以使用git用户通过ssh登录。

这意味着这个可以工作:

ssh git@serverIp

您已经定义了一个HOME变量,并且在%HOME%/.ssh/中有ssh公钥/私钥(id_rsa/id_rsa.pub)。

这个问题建议使用不同的url:

git remote set-url test git@serverIp:/home/git/test.git

请确认您创建的git仓库是以git账户(而不是root账户)创建的,就像这个问题中所示。 ssh git@serverIp "which git"应该返回git可执行文件的路径。
还要检查所有父目录是否为用户git或组gitgroup设置了相关的x(执行)位,运行ls -ld /home /home/git /home/git/test.git。 此外,可以使用以下命令获取有关git命令的更多信息:
- git push --verbose - GIT_TRACE=2 git push test master 如果您有一个带有密码的私钥,请先使用未受密码保护的私钥测试这些ssh命令,以查看问题是否仍然存在。 或者,您可以保留受密码保护的ssh密钥,但请仔细检查您的.bashrc文件
对于任何需要git密码的ssh连接问题,请检查:
- /var/log/auth.log - 一个sshd调试会话 在您的情况下,由于它可以使用交互式安全shell(ssh git@serverIp),但不能使用git(它打开非交互式安全shell),因此请查看此主题,它引用了这个主题
当使用命令行启动ssh时,会启动非交互式非登录shell。 但是... bash在这种情况下不使用$BASH_ENV,因此在~/.ssh/environment中设置它(例如为/etc/profile)没有帮助。 bash所做的是源/ etc / bashrc和~/.bashrc。
请确保 /etc/profile 中定义了 git 路径,因为这里可能会使用非登录账户(似乎是这种情况,因为 ssh git@serverIp "which git" 可以工作,ssh git@serverIp "git --version" 也应该可以)。
但同时还要检查权限问题,并对 /home/home/git/home/git/test.git 执行 chmod 755 进行测试。

3
原来 ssh:// URL 也是被支持的(参见 http://git-scm.com/book/ch4-1.html#The-SSH-Protocol),但是 OP 指定的方式有误。ssh://git@serverIp:/home/git/test.git 是无效的,因为多了一个冒号。正确的应该是 ssh://git@serverIp/test.git 或者像你建议的那样 git@serverIP:/home/git/test.git 或者 git@serverIp:test.git - John Szakmeister
我已经在 .ssh 中设置了密钥,尝试了每个版本的 URL,确保 git 是 test.git 的所有者,并且 test.git 已经设置了执行位。详细模式只提供了额外的“正在推送到”URL“消息。哦,我还在 .bashrc 中添加了建议的脚本。 - user1090755
@user1090755 如果在执行 ssh git@serverIP 时要求输入 git 的密码,那么这意味着 ssh 密钥没有正常工作。您可以通过查看 /var/log/auth.log 或进行一个 sshd 调试会话(http://serverfault.com/questions/130482/how-to-check-sshd-log)来了解更多信息。 - VonC
@user1090755,所以非交互式会话具有正确的路径和访问权限...但它仍然失败了?令人沮丧!除了某种防火墙/反病毒问题外,我有点不知所措。直接在服务器上克隆可以正常工作,对吧? - VonC
@user1090755,当从客户端(Windows 7)克隆时,在/var/log/auth.log文件(sshd日志)中有任何线索吗?我将在90分钟后回来提供更多支持。 - VonC
显示剩余15条评论

8

您也可以通过以下方式检查您的SSH身份:

$ ssh-add -L

我有类似的问题。我的身份认证中有一个错误的密钥,不记得为什么会出现这种情况。我只需删除所有身份认证(可能需要重新添加密钥):

$ ssh-add -D  

然后我进行了推/拉操作,没有遇到任何问题。

非常好的答案......你节省了我的时间...我已经生气了一个小时了...尝试了所有其他的东西.. - minhas23

7

我个人遇到了两个不同的问题:

  1. plink(在Windows上由git使用)不接受id_rsa私钥,因为它处于OpenSSH 2格式 => 我必须将其转换(使用puttygen)为PuTTY自己的.ppk格式并通过Git扩展“Remotes”对话框进行附加。

  2. 我错误地指定了git文件夹的路径,因为我的ssh会话被chrooted(可能是错误的单词),我将FTP的“root”指定为“/”,而实际上应该是“/home/www/username/”。

我理解了所有这些问题,使用上面描述的GIT TRACE=2以及使用procmon确定plink的确切命令行,然后添加“-v”选项(“详细”)。


0

将GIT_SSH环境变量设置为TortoisePlink.exe的完整路径(您可能需要下载TortoiseGit),而不是PuTTY的plink.exe。这将允许弹出对话框提示一些事情,例如确认指纹或输入密码。如果通过Git使用plink.exe,则无法键入响应以响应plink.exe提示,如果有任何提示,则会导致您看到的致命错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接