在gitlab上被拒绝许可(公钥)

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

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

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

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

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

340691 次浏览

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

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

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

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

Chown git:users authorized_keys

我找了很久才找到这个。这对我来说是完美的。

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

现在试一试,肯定会管用的。

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

< p >步骤1: 在~/.ssh/config文件中增加了一个配置文件,看起来像

   User git
Hostname gitlab.com
IdentityFile ~/.ssh/id_rsa_gitlab
TCPKeepAlive yes
IdentitiesOnly yes

步骤2:克隆没有sudo的git repo。
文档:https://gitlab.com/help/ssh/README#working-with-non-default-ssh-key-pair-paths < / p >

**有时你在~/.ssh/config中有配置,但是,IdentityFile路径不正确。你可以像这样检查文件名ls ~/.ssh/。gitlab的文件通常是id_ed25519。因此正确的配置是IdentityFile ~/.ssh/id_ed25519

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

ssh-add ~/.ssh/<your private key>

你基本上让ssh-agent来处理它。

此外,你可以永久添加

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

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

AllowUsers user1 user2 user3 git

我是这样解决的。

使用此命令生成Windows密钥:

ssh-keygen -t rsa -C "your.email@example.com" -b 4096
但是问题是在运行这个命令后,它弹出了一行: 输入保存密钥的文件(/c/Users/xxx/.ssh/id_rsa): " 在这里,我只给文件名,因为我的密钥被保存在我的pwd,而不是在给定的位置。当我做“git克隆”时,它假设键位于“/c/Users/xxx/”。

. Ssh /id_rsa" location但是没有找到,因此抛出错误

在密钥生成时,生成了2个文件,说“file1”&“file1.pub”。我将这两个文件重命名为

file1 -> id_rsa

而且

file1.pub -> id_rsa.pub

并将两者放在位置"/c/Users/xxx/.ssh/"

转到终端,重新生成ssh密钥。ssh-keygen类型。它会问你想保存在哪里,输入路径。

然后将公钥复制到gitlabs平台。它通常从ssh-rsa开始。

如果你用的是Linux或macox,在终端试试这个:

ssh-add -l

如果它什么都不返回,试试这个:

ssh-add

它必须在~/.ssh/id_rsa中创建identity

重试后:

ssh-add -l

它必须返回你的身份,所以重试克隆后,它必须工作

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

谢谢

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

在我的案例中,它在WSL (Linux的Windows子系统)中不起作用。

当我开始WSL时,我必须

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

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

来测试这个

注:

步骤要完成,得到相同的错误,但我修复了它。 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):

    . txt
  2. 它将再次提示您输入,所以只需在下面的代码提示后按enter,

    输入passsphrase(空表示没有passsphrase):

  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. 完成了。

我也有同样的问题,我通过添加一个新的ssh密钥来解决它:

  1. ssh-keygen -t ed25519 -C "email@example.com"
  2. 将您的公共SSH密钥复制到剪贴板(在我的Linux情况下为xclip -sel clip < ~/.ssh/id_ed25519.pub)
  3. 在gitlab上,找到settings=>ssh键并通过新键

我使用ubuntu 18.04,这实际上是我本地机器的权限问题。当我为我的.git文件夹设置读/写权限时,这个问题就消失了。

当你有多个git帐户,你想要不同的ssh密钥

您必须遵循生成ssh密钥的相同步骤,但请确保 你< / p >
ssh-keygen -t ed25519 -C "your-email-id@gmail.com"

输入您想要保存的路径(例如:my-pc/Desktop/.ssh/ed25519)

将公钥添加到你的gitlab (如何添加ssh密钥到gitlab)

您必须使用下面的命令创建新的ssh标识

ssh-add ~/my-pc/Desktop/.ssh/ed25519

我也有同样的问题,在尝试了@Khan的答案后,我提出了这个问题。然而,我只能通过将.git/配置文件中的原始url更改为https地址:https://gitlab.com/mygitlabusername/mygitproject.git来使其工作

由于通过ssh访问被拒绝,我发现使用https应该不是问题。但是,每次推送到at存储库时,它都会要求您提供用户名和密码

对我来说问题是,我在/etc/ssh/sshd_config下的SSH配置文件中将UsePAMyes切换到no。使用UsePAM yes,一切都很完美。

主要有两点

  1. 您必须有id_rsa。Pub和id_rsa(私有)密钥在您的.ssh文件夹中(应该在您的主文件夹中)。如果没有,就创造它,把你的钥匙放在那里)。如果你用不同的密钥文件命名,它就不会起作用

  2. 修改“id_rsa”的权限为“chmod 400 ~/.ssh/id_rsa . sh”

我在gitlab帮助中找到了解决方案。

To create a new SSH key pair:
1. Open a terminal on Linux or macOS, or Git Bash / WSL on Windows.
2. Generate a new ED25519 SSH key pair: ssh-keygen -t ed25519 -C "email@example.com"
2.1 Or, if you want to use RSA: ssh-keygen -o -t rsa -b 4096 -C "email@example.com"
3. Next, you will be prompted to input a file path to save your SSH key pair to... use the suggested path by pressing Enter
4. Once the path is decided, you will be prompted to input a password to secure your new SSH key pair. It's a best practice to use a password, but it's not required and you can skip creating it by pressing Enter twice.
5. Copy your public SSH key to the clipboard by using one of the commands below depending on your Operating System:
macOS:        pbcopy < ~/.ssh/id_ed25519.pub
WSL / GNU/Linux (requires the xclip package):      xclip -sel clip < ~/.ssh/id_ed25519.pub
Git Bash on Windows:      cat ~/.ssh/id_ed25519.pub | clip
6. Navigating to SSH Keys and pasting your public key in the Key field
7. Click the Add key button

我希望它能帮助到你们中的一些人!

如果您的站点使用TLS/SSL,请使用git config credential.helper store。 希望这是有效的

另一个可能导致这种行为的问题是当你有2个可能的%HOME%-locations的设置时。

我使用的是个人电脑,其中一些文档存储在本地,另一些存储在网络驱动器上。一些应用程序认为C:\Users\<MyUserName>\是我的%home%,另一些应用程序认为U:\是家。

原来ssh-keygen把我的私钥放在C:\users\<MyUserName>\下面,而ssh -Tssh -v也在那里查找。

所以一切似乎都工作正常,除了git clonegit push和其他在U:\中查找键。 它失败了,所以我得到了前面提到的错误。< / p >

我花了一个小时才找到答案,但最终的解决方案很简单:我将所有内容从C:\Users\<MyUserName>\.ssh复制到U:\.ssh

如何在ubuntu中添加SSH密钥到gitlab帐户?

  1. 在项目目录中打开终端。
  2. 输入' ssh-keygen -o -t rsa -b 4096 -C "your gitlab email" ',然后按enter键
  3. 键入' vim /home/mnbtech/.ssh/id_rsa. zip '。Pub '然后按回车键 (或者手动打开你的'id_rsa. exe '。Pub 'from where you saved it)
  4. SSH密钥将出现。复制这些

  5. 转到你的gitlab账户。

  6. 单击头像,单击“设置”
  7. 在左侧选择SSH-Keys
  8. 然后粘贴这些键 点击添加键

SSH-Key将被添加!

(注意,如果您有生成预览SSH密钥和获得拒绝权限(公钥)。您删除您的预览ssh密钥,并生成一个新的,并在您的终端上添加git用户名和电子邮件)

早些时候,这对我来说是非常困难的,但当我尝试时,在Mac和Linux中添加ssh密钥变得如此容易。有以下几个步骤和命令可以做到这一点:

  1. 打开系统的一个终端,通过下面的命令移动到项目目录中:
cd 'project directory name'
  1. 在该终端中运行命令ssh-keygen并输入它,直到密钥的randomart图像出现在那里。

  2. 然后在终端上再输入一个命令:

cat ~/.ssh/id_rsa.pub

它将生成ssh密钥。Key将以ssh-rsa开始,以.local结束。

  1. 复制密钥并到你的Gitlab配置文件部分,然后ssh key部分并粘贴在那里。点击Add按钮,这将工作。

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

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

有一个非常简单的解决方案: 与其使用SSH,不如使用https。 这样做: 在项目文件夹中有一个。git文件夹 在那里-你有一个配置文件-在文本编辑器中打开它 并更改行

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

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

修改权限::chmod 400 ~/.ssh/id_rsa

我也有同样的问题, 在我重新生成。ssh文件夹内的ssh密钥而没有命名它(保持它为id_rsa.pub)后,它已被修复。 然后再次添加到gitlab ssh key。

.

.

我解决了git@gitlab.com: Permission denied (publickey)问题使用以下说明

  1. 运行cat ~/.ssh/id_rsa.pub
  2. 复制id_rsa.pub(公钥)到你的getlab的设置-> SSH密钥
  3. 运行cat ~/.ssh/id_rsa
  4. 复制id_rsa(私钥)到“Code_repo->git_auth->id_rsa”

如果你在DockerFile或其他任何地方使用root用户,请注意机器用户,然后在运行上述命令之前使用sudo su来获取根用户的公钥和私钥。

我在Windows 10上使用Pageant作为SSH代理,除了向Windows添加一个环境变量(翻译自德语Windows 10,所以命名可能不同):

  1. 搜索“变量”
  2. 打开系统环境变量
  3. 单击底部的环境变量按钮
  4. 添加一个名为“GIT_SSH”的新密钥和值“C:\Program Files\PuTTY\plink.exe”,到顶部的“用户变量xxx”部分
  5. 做完了。

感谢Benjamin Bortels,来源:https://bortels.io/blog/git-in-vs-code-unter-windows-richtig-einstellen

尝试使用git clone XXX,如果你看到LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to XXX,它可能是刚刚更新了你的操作系统,安装了一些开发工具,例如Xcode及其在Mac上的工具,VPN,反病毒(特别是卡巴斯基反病毒)或其他之间的东西。

在我的情况下,简单地重新启动我的操作系统(macOS Catalina)修复了这个问题。

这个方法对我很有用。

  1. 添加SSH / rsa密钥到gitlab
  2. ssh-add(输入你的终端)
  3. 用于验证类型- ssh -vT git@gitlab.com

我的问题是我使用了一个具有sudo访问权限的非root用户。但是即使sudo git clone ...也不能工作。解决方案是为项目创建文件夹chown user projectfolder,然后不带sudo运行克隆。

在我们的例子中,这不是用户/客户端的问题,而是Gitlab服务器端的问题。

我们在CentOS 7.1上运行本地Gitlab CE 12.9实例。

我们发现在服务器上,. ssh / authorized_keys文件没有正确更新。用户创建他们的SSH密钥(遵循Gitlab指南)并将其添加到Gitlab服务器,但服务器不更新authorized_keys,因此它总是会导致权限拒绝错误。

一个解决方法是运行重新构建authorized_keys文件:

$ sudo gitlab-rake gitlab:shell:setup

这将适用于任何添加他们的密钥之前运行rake任务的人。对于下一个要添加密钥的用户,必须有人再次手动运行rake任务。

一个更持久的解决方案是使用authorized_keys文件,并使用在Gitlab数据库上进行索引查找代替:

GitLab Shell提供了一种通过快速、索引的方式授权SSH用户的方法 查找到GitLab数据库。GitLab Shell使用的指纹

.使用SSH密钥检查用户是否有权限访问GitLab 将以下内容添加到sshd_config文件中。这通常位于 /etc/ssh/sshd_config,但如果你是 使用Omnibus Docker:

Match User git    # Apply the AuthorizedKeysCommands to the git user only
AuthorizedKeysCommand /opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell-authorized-keys-check git %u %k
AuthorizedKeysCommandUser git
Match all    # End match, settings apply to all users again

重载OpenSSH:

# Debian or Ubuntu installations
sudo service ssh reload


# CentOS installations
sudo service sshd reload

通过在UI中删除用户的SSH密钥,添加一个新的密钥,并尝试拉出一个repo来确认SSH正在工作。

默认情况下(我们安装时的默认),写入authorized_keys文件Admin Area >性能优化设置中被检查。因此,我们未选中该选项,转而使用Gitlab数据库。

enter image description here

在设置了索引查找和取消检查写入authorized_keys文件之后,SSH访问就可以了。

对于任何使用Windows 10并且没有其他为他/她工作的人:

在我的情况下,我必须用https而不是ssh克隆回购,并弹出一个窗口要求我的凭据。

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

最基本的

首先,了解这里的遥控器是什么。Remote是GitLab,而你的系统是本地的,所以当我们讨论远程origin时,在你的git remote -v输出中设置的URL就是你的远程URL。

的协议

基本上,Git的克隆/推/拉主要适用于两种不同的协议(也有其他协议)

  1. HTTP协议
  2. SSH协议

当你克隆一个repo(或更改远程URL)并使用像https://gitlab.com/wizpanda/backend-app.git这样的HTTPs URL时,它会使用第一个协议,即HTTP协议。

而如果你克隆repo(或更改远程URL)并使用git@gitlab.com:wizpanda/backend-app.git这样的URL,那么它使用SSH协议。

HTTP协议

在该协议中,每个远程操作,即克隆、推送和amp;Pull使用简单的身份验证,即用户名&你的遥控器密码(在本例中是GitLab),这意味着每一次操作,你都必须输入你的用户名&密码可能会很麻烦。

所以当你推/拉/克隆,GitLab/GitHub验证你的用户名&密码,它允许你做操作。

如果你想尝试这样做,你可以通过运行命令git remote set-url origin <http-git-url>切换到HTTP 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告诉更多关于这一点。我在这里的观点是,通过阅读错误并对错误进行思考,你可以建立自己的理论或理解,然后可以匹配一些谷歌结果来解决问题:)

我正面临这个问题,因为Windows-10上的ssh-agent冲突。 如果你也在使用Windows-10,那么请通过我的详细解决方案来解决这个在这里

如果你不在windows-10,那么请检查是否:

  1. 您的ssh代理正在运行
  2. 将正确的私钥添加到ssh-agent中
  3. 正确的公钥被添加到你的github帐户(你可以克隆,所以这一步应该是好的)
  1. 使用cd path/to/project进入终端的工程目录
  2. 运行ssh-keygen
  3. 输入为密码短语
  4. 在终端运行cat ~/.ssh/id_rsa.pub
  5. 复制你在终端上得到的密钥
  6. Gitlab/Settings/SSH-KEYS
  7. 粘贴键并按添加关键按钮

这对我来说就像一个咒语!

创建SSH密钥后,您只需要添加公钥,通常命名为:

id_rsa.pub

id_ed25519.pub

通过使用GitLab最新的工作URL:

https://gitlab.com/-/profile/keys/

在我的例子中,我使用Ubuntu有两个用户,一个是admin用户,另一个是我,我创建了"id_rsa"和“;id_rsa . pub"文件时登录为我(普通用户),这些文件创建在您的" ssh"文件夹在你的主文件夹里, 它可能找不到,因为它是隐藏的,所以让它可见,以检查文件是否在其中 所以文件被创建在"家庭/ . ssh"但当我把代码推到gitlab时,我在终端上以管理员身份登录, using command: su - adminName(在此之后提示输入密码)

所以ssh私钥没有在“;adminhome / . ssh"文件夹中。要解决这个问题,你可以:

  1. 创建“id_rsa"和“;id_rsa . pub"在管理配置文件(或)中
  2. 使用您的配置文件而不是管理员配置文件将代码推入gitlab。

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

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

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

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

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

在我的例子中,在更新到12.9.2之后,我需要更新我的sshd_config文件以使用Authorized command keys指令。

所有的解释都在这里的文档: https://docs.gitlab.com/ee/administration/operations/fast_ssh_key_lookup.html < / p >

当我重新启动ssh时,密钥完美地工作了。