仅当从远程访问时无法推送到 Git 存储库

问题描述 投票:0回答:2

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

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

$ git push
[email protected]: 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 中执行命令,那么应该就像我直接坐在该计算机前运行相同的命令,不是吗?

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

git ssh remote-access
2个回答
1
投票

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

使用

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

ssh -Tv [email protected]

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

在 Git-for-Windows 上(此处不是这种情况,但让我们将其包括在内以供其他查看者使用),在确保

ssh -Tv ...
有效后,请确保 Git 使用 Windows 原生 ssh。请参阅Flimm 的回答如何使用 SSH 详细模式运行 git Push/pull 命令?如评论中提到的kiner_shah


1我意识到这本身没什么帮助。这里的问题是“不”可能有很多原因。这就是

-v
技巧派上用场的地方。请注意,配置中的
IdentitiesOnly yes
意味着仅使用配置中 中列出的身份,尽管
-i
选项无论如何都会添加。


0
投票

如果这对于任何遇到此问题的人来说仍然是一个问题,这对我有用:我使用下面的

git config
命令将以下设置添加到我的 .gitconfig 文件中:

git config --global core.sshcommand "ssh -i /path/to/your/private/key

因此,你的 git 配置文件应该包含如下内容:

[core]
pager = cat
sshCommand = ssh -i /path/to/your/private/key

运行

git config --list --global
应该包括这样的内容:

core.sshcommand=ssh -i /path/to/your/private/key
© www.soinside.com 2019 - 2024. All rights reserved.