【问题标题】:Can't push to Git Repository only when accessing it from remote只有从远程访问它时才能推送到 Git 存储库
【发布时间】:2025-11-26 13:30:01
【问题描述】:

我在使用 Git 时遇到了一个非常特殊的问题。我在 Gitlab 服务器上有一个存储库,我通常在办公室的工作计算机(运行 Ubuntu)上处理它。在那里,我设置了一个私钥/公钥,一切正常。

现在奇怪的是,当我从家里 ssh 到我的工作计算机并执行拉取、推送或任何其他需要连接到 Gitlab 服务器的 Git 命令时,我收到一个错误,说我的公钥错误.

$ git push
git@collaborating.tuhh.de: Permission denied (publickey).
fatal: Could not read from remote repository.

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

根据我的理解,如果我 ssh 进入我的工作计算机并在 shell 中执行一个命令,那应该就像我直接坐在那台计算机前运行相同的命令一样,不是吗?

有人知道为什么会出错吗?欢迎任何想法!

【问题讨论】:

  • 公钥错误 错误信息不是很明显吗?您应该使用家用计算机上的相同公钥/私钥对来访问服务器。
  • 不,我认为我们是误会了。我不想从家里的电脑上推送。我正在 ssh-ing 到我的工作计算机并尝试从那里推送,无论我是通过 ssh 还是直接使用它,我都应该有完全相同的密钥设置,不是吗?
  • 贵公司的 Gitlab 服务器是否托管在需要 VPN 连接的专用网络中?
  • 也许这有帮助:*.com/a/36038548
  • 星期一会做。感谢您的帮助!

标签: git ssh remote-access


【解决方案1】:

Ssh 是或者可能是相当复杂和花哨的。如果您使用的是 ssh 代理,请记住该代理将提供密钥,除非它不提供。1如果您不使用代理,则 ssh 配置将始终提供密钥.

使用ssh-add -l 查看代理可以看到的密钥。检查您的~/.ssh/config 文件以查看您告诉 ssh 发送哪些密钥。使用ssh -v 或多个-v 选项(尽管通常一个就足够了)来观察您的 ssh 客户端实际尝试的密钥:

ssh -Tv git@github.com

例如显示我的 ssh 客户端向 github.com 提供我个人的 GitHub 特定 RSA 密钥。

在 Git-for-Windows 上(这里不是这种情况,但让我们为其他查看者包含它),在确保 ssh -Tv ... 有效之后,确保 Git 使用的是 Windows-native ssh。请参阅 Flimm's answerHow can I run git push/pull commands with SSH verbose mode?kiner_shah mentioned in a comment


1我意识到这本身是没有帮助的。这里的问题是“它没有”可能有很多原因。这就是-v 技巧派上用场的地方。请注意,配置中的IdentitiesOnly yes 意味着只有在配置中列出的身份 才会被使用,尽管-i 选项无论如何都会添加。

【讨论】: