在gitlab上获得权限被拒绝(公钥)

Ale*_*meu 98 git ssh ubuntu gitlab

我的问题是我不能从GitLab推送或获取.但是,我可以克隆(通过HTTP或通过SSH).我尝试推送时出现此错误:

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

从我看过的所有主题来看,这就是我所做的:

  • 在我的计算机上设置SSH密钥并将公钥添加到GitLab
  • 用户名和电子邮件完成配置--global
  • 通过SSH和HTTP进行克隆,以检查是否可以解决问题
  • 完成ssh -T git@gitlab.com命令

现在我想要打我的电脑.如果您对如何解决我的问题有任何见解,我们将不胜感激.

Muh*_*han 181

经过大量搜索后我发现了这个.它对我来说非常好.

  1. 像cmd一样去"Git Bash".右键单击并"以管理员身份运行".
  2. 类型 ssh-keygen
  3. 按enter键.
  4. 它会要求您将密钥保存到特定目录.
  5. 按enter键.它会提示您输入密码或输入无密码.
  6. 将为特定目录创建公钥.
  7. 现在转到目录并打开.ssh文件夹.
  8. 你会看到一个文件id_rsa.pub.在记事本上打开它.从中复制所有文本.
  9. 转到https://gitlab.com/profile/keys.
  10. 粘贴在"密钥"文本字段中.
  11. 现在点击下面的"标题".它会自动填满.
  12. 然后单击"添加密钥".

现在试一试,它肯定会起作用.

  • 如果您已经拥有密钥,则可以跳过步骤1到6 (7认同)
  • 我这样做了,问题没有解决,权限被拒绝 (6认同)
  • 确保执行以下操作:`ssh-add filename`(如果不在rsa dir中,则带有路径) (5认同)
  • 万一您在将 pub 文件复制到剪贴板时迷路了。尝试以下操作:`type %userprofile%\.ssh\id_rsa.pub | 剪辑` (3认同)
  • 在Windows 10中如果你确实需要找到.ssh\id_rsa.pub,你可以在git bash上键入这个**cat~/.ssh/id_rsa.pub**它会显示"Key",这样你就可以复制并粘贴了它到https://gitlab.com/profile/keys中的文本字段 (3认同)
  • 我仍然需要执行`ssh-add`命令 (3认同)
  • 引用@Blasanka的答案“ssh-add filename”,其中“filename”是末尾没有“.pub”的文件。系统将提示您输入在 ssh 密钥创建过程中生成的密码以添加您的身份 (3认同)

小智 50

第1步:在〜/ .ssh /文件夹中添加了一个配置文件

   User git
   Hostname gitlab.com
   IdentityFile ~/.ssh/id_rsa_gitlab
   TCPKeepAlive yes
   IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

第2步:只需克隆没有sudo的git repo.

  • 这也对我有用。感谢您的解决方案。 (3认同)
  • 如果具有默认名称的密钥文件已用于不同目的,则这是必需的。如果您要创建具有非默认名称的密钥文件,例如 Fedo 示例中的“id_rsa_gitlab”,您将需要提供一个配置文件。Gitlab 关于此事的好文章:https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths (2认同)

Hus*_*ain 20

我认为简单的解决方案是将私钥添加到身份验证代理(如果您的密钥不是~/.ssh/id_rsa),

ssh-add ~/.ssh/<your private key>
Run Code Online (Sandbox Code Playgroud)

你基本上让它ssh-agent照顾它.

此外,您可以永久添加它.

  • 不.私钥是没有`.pub`扩展名的文件. (7认同)
  • 为我工作。我有默认配置,所以我在控制台中输入: ~$ ssh-add ~/.ssh/id_ed25519 ,它起作用了。@侯赛因谢谢 (2认同)

Ela*_*lad 15

对此有一个非常简单的解决方案:不要使用 ssh - 移至 https。要做到这一点:在您的项目文件夹中,您有一个 .git 文件夹 - 您有一个配置文件 - 在文本编辑器中打开它并更改该行

url =git@gitlab.com:yourname/yourproject.git

url = https://gitlab.com/yourname/yourproject.git

  • 这并不能解决问题,而是完全回避了问题。 (4认同)

TmT*_*ron 13

就我而言,它在WSL(Linux的Windows子系统)中不起作用。

启动WSL时,我必须

  • 启动ssh-agent_ eval $(ssh-agent -s)
  • 将密钥添加到ssh-agent: ssh-add ~/.ssh/id_rsa
  • 如果出现提示,请输入密码

现在连接正常。
我们可以用ssh -T git@github.com

笔记:


riv*_*nov 11

确保你没有运行sudo git clone git@gitlab.com:project/somethiing.git,否则ssh会查找/root/.ssh而不是你上传的密钥~/.ssh/id_rsa


小智 6

如果您使用的是Linux或macox,请在终端中尝试以下操作:

ssh-add -l
Run Code Online (Sandbox Code Playgroud)

如果没有返回任何内容,请尝试以下操作:

ssh-add
Run Code Online (Sandbox Code Playgroud)

它必须在〜/ .ssh / id_rsa中创建身份

重试后:

ssh-add -l
Run Code Online (Sandbox Code Playgroud)

它必须返回您的身份,因此在尝试克隆后,它必须可以工作

注意:不要忘记在个人资料gitlab中添加ssh密钥

谢谢


sko*_*rez 5

就我而言,这不是一个gitlab问题,而是一个sshd配置问题。ssh服务器不允许连接,但用户列表除外。用户git(一个远程连接到gitlab的用户)不在该列表中。因此,请先检查此内容。

您可以在中检查ssh服务器配置/etc/ssh/sshd_config。如果您在选项行中AllowUsers添加git:

AllowUsers user1 user2 user3 git
Run Code Online (Sandbox Code Playgroud)


Y. *_*gha 5

要完成的步骤,遇到了同样的错误,但我修复了它。Gitlab 需要 ssh-rsa 所以下面是为 rsa 运行 ssh 的代码

  1. ssh-keygen -o -t rsa -b 4096 -C "name@gmail.com"

name@gmail.com 是您的 gitlab 帐户电子邮件

  1. 它会提示你输入,所以在下面的代码提示后按 Enter 键,

    输入保存密钥的文件 (/home/yourDesktopName/.ssh/id_rsa):

  2. 它会再次提示您输入,因此在提示以下代码后按 Enter 键,

    输入密码(空表示没有密码):

  3. 它会再次提示您最后一次输入,因此在提示以下代码后按 Enter 键,

    再次输入相同的密码:

  4. 您将显示您的 ssh-rsa 生成。

  5. 登录到您的 Gitlab 帐户并转到右侧导航栏,您将获得设置,在左侧边栏中,您将获得 ssh 密钥。进入其中。

  6. 看上面提示你输入,你会得到ssh-rsa的路径。

  7. 转到您的 SSH 文件夹并获取 id_rsa.pub

  8. 打开它并获取密钥并复制粘贴到 Gitlab,您就快完成了。

  9. 检查方式: ssh -T git@gitlab.com

  10. 你会得到: Welcome to GitLab, @joy4!

  11. 完毕。


Sha*_*wal 5

我知道,我很晚才回答这个问题,甚至 StackOverflow 也确认了我是否真的想回答。我回答是因为没有人真正描述过实际问题,所以想分享相同的问题。

基础知识

首先,了解一下这里的遥控器是什么。Remote 是 GitLab,而您的系统是本地的,所以当我们谈论 remote 时origingit remote -v输出中设置的任何 URL都是您的远程 URL。

协议

基本上,Git clone/push/pull 主要适用于两种不同的协议(还有其他协议)-

  1. HTTP协议
  2. SSH协议

当您克隆存储库(或更改远程 URL)并使用https://gitlab.com/wizpanda/backend-app.git等 HTTPs URL 时,它使用第一个协议,即 HTTP 协议。

如果您克隆存储库(或更改远程 URL)并使用该 URL,git@gitlab.com:wizpanda/backend-app.git则它使用 SSH 协议。

HTTP 协议

在这个协议中,每个远程操作,即克隆、推和拉都使用简单的身份验证,即您的远程(在本例中为 GitLab)的用户名和密码,这意味着对于每个操作,您必须输入您的用户名和密码,这可能很麻烦.

因此,当您推/拉/克隆时,GitLab/GitHub 会使用您的用户名和密码对您进行身份验证,并允许您进行操作。

如果你想试试这个,你可以通过运行命令切换到 HTTP URL git remote set-url origin <http-git-url>

为了避免这种情况,您可以使用 SSH 协议。

SSH协议

一个简单的 SSH 连接适用于公私密钥对。因此,在您的情况下,GitLab 无法对您进行身份验证,因为您使用 SSH URL 进行通信。现在,GitLab 必须以某种方式了解您。为此,您必须创建一个公私钥对并将公钥提供给 GitLab。

现在,当您使用 GitLab 推/拉/克隆时,GIT(内部 SSH)将默认将您的私钥提供给 GitLab 并确认您的身份,然后 GitLab 将允许您执行操作。

所以我不会重复穆罕默德已经给出的步骤,我会在理论上重复它们。

  1. 生成密钥对`ssh-keygen -t rsa -b 2048 -C "My Common SSH Key"
  2. 默认情况下,生成的密钥对将在~/.ssh命名id_rsa.pub(公钥)& id_rsa(私钥)中。
  3. 您将公钥存储到您的 GitLab 帐户(同一密钥可用于多个或任何服务器/帐户)。
  4. 当您克隆/推/拉时,GIT 会提供您的私钥。
  5. GitLab 将私钥与您的公钥匹配并允许您执行。

提示

您应该始终创建至少 2048 字节的强 rsa 密钥。所以命令可以是ssh-keygen -t rsa -b 2048.

https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair

一般思想

这两种方法都有其优点和缺点。在我输入上面的文字后,我去搜索了更多关于这个的内容,因为我从来没有读过关于这个的东西。

我找到了这个官方文档https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols,它讲述了更多关于这个的信息。我的观点是,通过阅读错误并思考错误,您可以做出自己的理论或理解,然后可以匹配一些谷歌结果来解决问题:)


小智 5

  1. 使用转到终端中的项目目录cd path/to/project
  2. 跑步ssh-keygen
  3. enter输入密码
  4. cat ~/.ssh/id_rsa.pub在终端中运行
  5. 复制您在终端获得的密钥
  6. Gitlab/Settings/SSH-KEYS
  7. 粘贴密钥并按添加密钥按钮

这对我来说就像一个魅力!