我的问题是我不能从GitLab中push或fetch。但是,我可以克隆(通过HTTP或SSH)。当我试图推的时候,我得到这个错误:

权限被拒绝(publickey)致命:无法从远程存储库读取

从我看过的所有线索来看,以下是我所做的:

在我的电脑上设置一个SSH密钥,并将公钥添加到GitLab 完成了用户名和电子邮件的config -global 通过SSH和HTTP克隆,以检查它是否能解决问题 执行ssh -T git@gitlab.com命令

如果您对如何解决我的问题有任何见解,我将不胜感激。


当前回答

我添加了~/.ssh/id_rsa。pub到我的GitLab设置中的已知SSH密钥列表https://gitlab.com/profile/keys。这为我解决了问题。: -)

其他回答

这可能听起来很愚蠢,但请确保您的系统和git客户端使用相同的ssh客户端。这在Windows上可能是最相关的。

当您安装现代版本的Windows时,默认情况下会安装OpenSSH客户端,而当您为Windows安装Git时,它在内部使用自己捆绑的ssh客户端。因此,您需要将Git for Windows指向您的OpenSSH安装。

对于任何其他第三方ssh客户端也是一样的,我们在这里只选择OpenSSH作为我们的客户端。

Win + R => cmd 如果安装了OpenSSH路径 Win + S => '编辑环境变量 系统变量=>查找GIT_SSH密钥 编辑或创建(如果不存在),将其值设置为OpenSSH path 创建一个新的终端实例,现在应该在其中应用更改,这样就可以继续了。

注意,如果你使用的是VS Code或其他具有集成终端的编辑器,仅仅创建一个新的编辑器是不够的,你需要重新启动你的编辑器。

这两种访问git存储库的方式之间似乎存在差异,即使用SSH或HTTPS。对我来说,我遇到这个错误是因为我试图使用SSH推送我的本地存储库。

这个问题可以简单地通过单击项目登录页面上的克隆按钮来解决,复制HTTPS链接并将其替换为格式为“git@gitlab...”的SSH链接。

在我的例子中,这不是一个gitlab问题,而是一个sshd配置问题。除了用户列表之外,ssh服务器不允许连接。用户git,即远程连接到gitlab的用户,不在该列表中。所以,先检查这个。

您可以在/etc/ssh/sshd_config中查看您的ssh服务器配置。如果你有一行AllowUsers选项,添加git到它:

AllowUsers user1 user2 user3 git

我有gitlab运行docker,这是我所做的解决我的问题。

发现在docker /var/log/gitlab/sshd/current内部出现了多条消息:

身份验证被拒绝:文件/var/opt/gitlab/.ssh/authorized_keys的所有权或模式错误

之后,我将该文件的所有权从99:users更改为git:users:

Chown git:users authorized_keys

我花了好几个小时才修好的。下面的方法对我很有效。

在终端上执行这些命令。

ssh-keygen -t rsa -C "<your email address>" -b 4096 -t ed25519

将生成的密钥重命名为:id_rsa和id_rsa。将生成的公钥添加到gitlab服务器。

然后将ssh密钥添加到ssh代理,如下所示。

启动ssh-agent Eval "$(ssh-agent -s)" 如果生成的密钥名称不同,请在下面的命令中替换id_rsa ssh-add ~ / . ssh / id_rsa

要测试连接,请使用此命令。

ssh -T git@<git lab server url>

要排除故障,请使用以下命令。

ssh -Tv git@<git lab server url>
ssh -vvv git@<git lab server url>

现在可以将项目克隆到本地环境。