SSH克隆无法与Github配合使用。

26

我刚开始接触Git和GitHub。

我创建了一个新的仓库,并尝试在我的本地机器上进行克隆。

对于https和git-readonly URLs,它可以正常工作。也就是说,以下内容可以正常工作:

  • git clone https://github.com/npsabari/testrepo.git
  • git clone git://github.com/npsabari/testrepo.git

但是,当我尝试使用git clone git@github.com:npsabari/testrepo.git时,它无法工作。它给出了以下错误消息:

Cloning into 'testRepo'...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

然后我尝试了ssh git@github.com,但是我收到了以下错误:

"Permission denied (publickey)."

而不是欢迎消息。

我应该怎么做才能解决这个问题?出错的原因是什么?


5
你已经生成、更新并确认了一个SSH密钥吗? - Mihai Maruseac
不行!我不知道如何生成、更新或确认SSH密钥。今天我才开始使用git..那么,如何完成上述所有操作? - sabari
请看我的回答,其中包含一个链接(第三个)到教程。 - Mihai Maruseac
10个回答

24

1
这个问题解决了!我还有一个疑问,如果我使用其他机器来克隆我的代码库,我需要在那台机器上生成SSH密钥并将其添加到我的GitHub帐户中吗?还是我只能从一台机器进行SSH连接..? - sabari
1
最好为每台机器生成一个密钥。您可以从一台机器复制到另一台机器,但不建议这样做,因为一旦一台机器被攻破,使用相同密钥的所有机器都会受到影响。一个中间的解决方案是在USB存储设备上保存一个密钥,并使用标志来告诉您要使用它们。然而,最好还是坚持每台机器使用一个密钥:D - Mihai Maruseac
Sabari和@MihaiMaruseac,事实上我尝试将一个EC2实例的密钥复制到另一个实例中,但失败了。我猜只有新生成的密钥才能起作用? - Nam G VU
不,复制密钥也可以。每次我换个人用电脑的时候我都这么做,而且它总是有效的。 - Mihai Maruseac
虽然这说出了问题所在,但它并没有说如何解决问题。对我来说,这似乎是一个“公主在另一个城堡”的答案。 - en_Knight

7

4
错误的原因是您没有将公钥(~/.ssh/id_rsa.pub)上传到 GitHub。请在您的帐户中添加它(您可以通过 GitHub 提供的 Web 面板完成此操作),然后它就会起作用。

如何做到这一点?而且我在~/.ssh文件夹中没有id_rsa.pub文件。如何生成它? - sabari
上传公钥是仓库所有者必须完成的任务,还是克隆操作的执行者需要完成? - BenKoshy
你知道公共代码库是否必要吗? - BenKoshy

4
在我的情况下,问题是我使用的机器是由存储库进行身份验证,而不是由我的用户进行身份验证,尽管已经注册了一个SSH密钥到我的GitHub帐户。
您可以检查谁已通过身份验证。
ssh -T git@github.com

这是因为我配置了一个ssh密钥作为部署密钥到我正在工作的其中一个代码库中。


2

我曾经遇到过这种情况——只有一次——就是使用ssh-keygen生成的密钥被损坏了。检查私钥和公钥文件,它们的语法、长度等都是正确的。

但它就是不起作用。

在同一台机器上,我重新生成了一对密钥。这最终让我通过ssh连接到了github。


2

我想补充一点,如果需要使用sudo,可能会干扰,因为SSH密钥未绑定到该用户。您可能希望在使用git之前编辑权限,而不是之后。


2
被低估的答案。不得不更改目录所有权并在没有sudo的情况下克隆,然后它就起作用了。谢谢。 - emmaakachukwu

1

1

克隆有两种方式。
1. SSH
2. HTTPS
在我的情况下,第一种方式出现了与您遇到的类似问题,但是我尝试使用以下命令运行HTTPS方式。
git clone https://xyz
在此之前,请运行此命令git remote -v。这应该显示
1. git-url(fetch)
2. git-url(push)
如果您在运行命令时看到这两个内容,则表示您具有push权限和fetch权限。在您配置并正确设置代理之后,如果仍然遇到问题,则我解释的此解决方案应该有效。如果您的SSH公钥和私钥错误,则必须先修复它们,然后再进行其他操作。


1
2023年,对我来说简直是一个噩梦。
没有任何参考资料可以帮助我找到解决方案。经过一些深夜研究,我找到了适合我的方法。所以如果有人需要并且能省点时间的话,我分享一下。
在你的终端中运行以下命令:
ssh-keygen -t ed25519 -C "your_email@example.com"
你可以跳过添加任何名称,只需按回车键即可。
你可以选择添加密码短语,或者跳过(尽管不推荐)。
现在,你需要复制新生成的.pub密钥中的代码。为此,请运行以下代码:
cat ~/.ssh/id_ed25519.pub
登录Github.com,转到设置页面,然后导航到“SSH和GPG密钥”。
点击“New SSH key”。
给它取个名字,然后粘贴.pub文件中的代码,并保存。
现在你应该可以进行git克隆了 :)

1

Linux 快速解决方案:

  1. 运行命令:find -al ~/.ssh

  2. 复制“id_rsa.pub”中的文本

(如果没有 ssh 文件,则需要创建一个)

  1. 进入 GitHub 账户,并单击右上角的个人资料图片。从下拉菜单中选择“设置”。

  2. 在左侧边栏中,单击“SSH 和 GPG 密钥”。

  3. 单击“新 SSH 密钥”按钮。

  4. 将公共 SSH 密钥粘贴到“密钥”字段中。

  5. 尝试使用 SSH 再次克隆


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接