【问题标题】:git push to remote repository "Could not read from remote repository"git push 到远程存储库“无法从远程存储库读取”
【发布时间】:2013-04-13 16:24:33
【问题描述】:

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

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

这是我所做的:

  • /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

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

更新:

  • “哪个 git”返回 /usr/bin/git
  • PATH 回显包括 /usr/bin
  • id_rsa 和 id_rsa.pub 文件均已设置并输入密码
  • 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'\'' ' 致命:无法从远程存储库中读取。请确保您具有正确的访问权限并且存储库存在。

【问题讨论】:

  • 什么,刚刚发生了什么?它工作我刚刚重新安装了Git,选择openssh而不是putty,它毫无问题地推送到远程存储库。
  • 对,我没有马上看到 plink,但我总是在我的 git 安装中使用 openssh。我已经更新了答案。
  • 如果 plink 减少了功能,他们应该从选项列表中删除它。非常感谢我在这个问题上花了几天时间。
  • 一个原因可能是您的主目录的所有权/模式错误。我得到了Authentication refused: bad ownership or modes for directory /home/data/users/okopp

标签: git ssh repository git-remote


【解决方案1】:

在这种情况下,使用 openssh 而不是 putty 是关键。


原始答案(调试提示)

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

这意味着这有效:

ssh git@serverIp

您确实定义了 HOME 变量,并在 %HOME%/.ssh/ 中定义了 ssh 公钥/私钥 (id_rsa / id_rsa.pub)。

This question 建议使用不同的网址:

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

确保您确实将 git 存储库创建为 git(而不是 root,当您创建 git 帐户时,如 this question)。
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 密钥测试这些 ssh 命令,看看问题是否仍然存在。
或者,您可以保留受密码保护的 ssh 密钥,但 double-check your .bashrc as in this answer


对于任何 ssh 连接问题(需要 git 的密码),检查:


在您的情况下,因为它适用于 ssh git@serverIp(交互式安全外壳),但不适用于 git(打开非交互式安全外壳),请查看 this thread,它引用了 this one

当使用命令行启动 ssh 时,会启动一个非交互式非登录 shell。
但是...bash 在这种情况下不使用$BASH_ENV,因此将其设置为~/.ssh/environment(例如设置为/etc/profile)并没有帮助。
bash 所做的是源/etc/bashrc~/.bashrc

确保/etc/profile 确实定义了path for git,因为non-login account could be used here(这里似乎就是这种情况,因为ssh git@serverIp "which git" 有效,ssh git@serverIp "git --version" 也应该如此)。

但也要检查正确的问题,并在 /home/home/git/home/git/test.git 上测试 chmod 755

【讨论】:

  • 原来ssh:// url 是supported as well,但是 OP 指定错误。 ssh://git@serverIp:/home/git/test.git 无效,因为有多余的冒号。它应该是 ssh://git@serverIp/test.git 或者,如你所建议的,git@serverIP:/home/git/test.gitgit@serverIp:test.git
  • 我在 .ssh 中设置了密钥,我尝试了每个版本的 url,我确保 git 是 test.git 的所有者,并且 test.git 已经设置了执行位。详细只给出额外的“推送到”url”消息。哦,我在 .bashrc 中添加了建议的脚本
  • @user1090755 您的私有 ssh 密钥密码是否受保护?
  • 我输入了密码是的,但刚才我创建了一个没有密码的新密码。顺便说一句,“哪个 git”要求输入 git 用户密码,然后返回给我 git 可执行路径。
  • @user1090755 ssh git@serverIP 不应该要求您提供git 的密码,或者这只是意味着 ssh 密钥无法正常工作。您可以通过查看/var/log/auth.log 或制作一个sshd 调试会话(serverfault.com/questions/130482/how-to-check-sshd-log)了解更多信息
【解决方案2】:

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

$ ssh-add -L

我遇到了类似的问题。我的身份中有一个错误的密钥,不记得为什么。 我只是删除了我所有的身份(也许你需要再次添加密钥):

$ ssh-add -D  

然后我没有问题地推/拉。

【讨论】:

  • 很好的答案.....你节省了我的时间......自从上一个小时以来我一直很生气......尝试了所有其他的东西......
【解决方案3】:

我个人对此有两个不同的问题:

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

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

我理解了这一切,如上所述使用GIT TRACE=2 以及使用procmon 确定plink 的确切命令行,然后使用它,添加“-v”选项(“verbose” )。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 1970-01-01
      • 2019-10-24
      • 2018-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2014-01-12
      • 2015-01-19
      相关资源
      最近更新 更多