关于git:在gitlab上获得权限被拒绝(公钥)

Getting permission denied (public key) on gitlab

我的问题是我不能从Gitlab推或取东西。但是,我可以克隆(通过http或ssh)。当我尝试按下时,会出现此错误:

Permission denied (publickey) fatal : Could not read from remote repository

从我看过的所有线索来看,我做了以下工作:

  • 在我的计算机上设置一个ssh密钥并将该公钥添加到Gitlab
  • 完成配置——用户名和电子邮件的全局配置
  • 通过ssh和http克隆,以检查是否可以解决问题
  • 完成ssh-t [email protected]命令

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


我搜索了很久才找到这个。这对我来说会很好。

  • 像命令一样转到"git bash"。右键单击并"以管理员身份运行"。
  • ssh-keygen
  • 按回车键。
  • 它将要求您将密钥保存到特定目录。
  • 按回车键。它将提示您键入密码或不输入密码。
  • 将为特定目录创建公钥。
  • 现在转到目录并打开.ssh文件夹。
  • 您将看到一个文件id_rsa.pub。在记事本上打开它。从中复制所有文本。
  • 转到https://gitlab.com/profile/keys。
  • 粘贴到"键"文本字段中。
  • 现在单击下面的"标题"。它将自动填充。
  • 然后点击"添加键"。
  • 现在试一试,肯定会成功的。


    步骤1:在~/.ssh/文件夹中添加了一个配置文件,它看起来像

    1
    2
    3
    4
    5
       User git
       Hostname gitlab.com
       IdentityFile ~/.ssh/id_rsa_gitlab
       TCPKeepAlive yes
       IdentitiesOnly yes

    第二步:克隆没有sudo的git repo。


    我认为简单的解决方案是向认证代理添加私钥(如果您的密钥不是~/.ssh/id_rsa)。

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

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

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


    确保您没有运行sudo git clone [email protected]:project/somethiing.git,否则ssh将查找/root/.ssh,而不是您上载~/.ssh/id_rsa的密钥。


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

    当我启动WSL时,我必须

    • 启动ssh-agent_uedcx1〔13〕。
    • 向ssh代理添加密钥:ssh-add ~/.ssh/id_rsa
    • 如果出现提示,请输入密码

    现在连接工作。我们可以用ssh -T [email protected]测试这个。

    详细说明:Git via SSH from Windows返回权限被拒绝


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

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

    1
    AllowUsers user1 user2 user3 git


    如果您使用的是Linux或Macox,只需在终端中尝试:

    1
    ssh-add -l

    如果没有返回,请尝试以下操作:

    1
    ssh-add

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

    重试后:

    1
    ssh-add -l

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

    注意:不要忘记在配置文件Gitlab中添加ssh密钥。

    谢谢


    要做的步骤,有相同的错误,但我修正了它。Gitlab想要ssh rsa,所以下面是运行ssh for rsa的代码

  • ssh-keygen -o -t rsa -b 4096 -C"[email protected]"
  • [email protected]是您的gitlab帐户电子邮件

  • 它将提示您输入,因此在提示下面的代码后,只需点击Enter。

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

  • 它将再次提示您输入,因此在提示下面的代码后,只需点击Enter。

    输入密码短语(无密码短语为空):

  • 它将再次提示您最后一次输入,因此在提示下面的代码后单击Enter。

    再次输入相同的密码:

  • 您将显示您的ssh rsa generate。

  • 登录您的Gitlab帐户,转到右侧的导航栏,您将获得设置,在左侧的侧栏中,您将获得ssh密钥。进去吧。

  • 查看上面的提示,要求您输入,您将获得ssh rsa的路径。

  • 转到ssh文件夹并获取id_rsa.pub

  • 打开它,拿到钥匙,复制粘贴到Gitlab,你就快完成了。

  • 审核人:ssh -T [email protected]

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

  • 完成。


  • 我让gitlab和docker一起运行,这是我解决问题的方法。

    发现在docker/var/log/gitlab/sshd/current中有多个消息出现:

    Authentication refused: bad ownership or modes for file /var/opt/gitlab/.ssh/authorized_keys

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

    chown git:users authorized_keys


    转到终端,重新生成ssh密钥。ssh-keygen型。它将询问您要将其保存到哪里,键入路径。

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


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

  • ssh-keygen -t ed25519 -C"[email protected]"
  • 将您的公共ssh密钥复制到剪贴板(在Linux上是xclip -sel clip < ~/.ssh/id_ed25519.pub)
  • 在Gitlab上,转到settings=>ssh键,然后通过新键

  • When you have multiple git account and you want different ssh key

    You have to follow same step for generating the ssh key, but be sure
    you

    1
    ssh-keygen -t ed25519 -C"[email protected]"

    输入要保存的路径(例如:my pc/desktop/.ssh/ed25519)

    将公钥添加到Gitlab(如何将ssh密钥添加到Gitlab)

    You have to new ssh identity using the below comand

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

    主要有两件事

  • 您的.ssh文件夹中必须有id_rsa.pub和id_rsa(private)密钥(应该在您的主文件夹中。如果没有,请创建它,然后放入您的密钥)。如果您对密钥文件进行了不同的命名,它将不起作用。

  • 将id_rsa的权限更改为chmod 400~/.ssh/id_rsa


  • 我就这样解决了……

    使用此命令为Windows生成了一个密钥:

    1
    ssh-keygen -t rsa -C"[email protected]" -b 4096

    但问题是,运行此命令后,它弹出一行:"输入保存密钥的文件(/c/users/xxx/.ssh/id_rsa):"在这里,我只给出了文件名,因为我的密钥保存在我的pwd中,而不是给定的位置。当我执行"git clone"时,它假定密钥位于"/c/users/xxx/.ssh/id_rsa"位置,但没有找到,因此它抛出了错误。

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

    1
    file1 -> id_rsa

    1
    file1.pub -> id_rsa.pub

    都放在"/c/Users/xxx/.ssh/"的位置


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


    嗯,我也遇到了同样的问题,在尝试了@khan提出的答案之后。但是,我只能通过将.git/config文件中的源URL更改为https地址来使其正常工作:https://gitlab.com/mygitlabusername/mygitproject.git

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


    我的问题是,我把UsePAMyes切换到/etc/ssh/sshd_config下ssh配置文件中的no。有了UsePAM yes,一切都很好。


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