Git推送:权限被拒绝(公钥)

110

我正试图将一个文件推送到我的朋友的git仓库,但是公钥出现了错误。

git push origin testbranch
Permission denied (publickey).
fatal: Could not read from remote repository.

我们在哪里以及如何定义公钥/私钥?

git remote -v返回:

origin  git@github.com:Sesamzaad/NET.git (fetch)
origin  git@github.com:Sesamzaad/NET.git (push)

非常感谢您的帮助。


嗨@wyguf,请在我的回答有帮助的情况下接受它。 :) 谢谢 - Shrutee
3
“\302\226git@github.com: Permission denied (publickey).”这句话的意思是:当我从Github复制远程URL时,出现了一些无关紧要的字符,导致我无法访问该仓库,出现了“Permission denied (publickey)”错误。 - jozxyqk
Luan Si Ho的解决方案对我起作用了。 - Umer Khalid
23个回答

161

我曾面临过同样的问题,这是我所做的,让它对我有效。

使用ssh而非http。如果原始网址是http,则将其删除。

git remote rm origin

添加ssh url
git remote add origin git@github.com:<username>/<repo>.git

在.ssh/文件夹内生成ssh密钥。它将要求您输入路径和密码短语,您可以只按回车键并继续。

cd ~/.ssh
ssh-keygen

复制密钥。您可以使用 - 查看您的密钥

cat ~/.ssh/id_rsa.pub

如果您没有指定其他路径,则这将是默认路径。
请将此密钥添加到您的Github帐户中。
接下来执行 -
ssh -T git@github.com

您将在控制台中收到欢迎消息。

进入您的项目文件夹。现在git push -u origin master可用!


2
我收到了欢迎消息,但是 git push -u origin master 仍然无法工作。 - Hack-R
1
在我的情况下,只需要执行“git remote rm”和“git remote add”这两个步骤就足够了。 - Stephan Ahlf
9
我在 Gid Bash 上尝试了以下命令:"cat ~/.ssh/id_rsa.pub" 和 "ssh -T git@github.com"。但是只得到了 "git@github.com: Permission denied (publickey)." 请帮忙解决。 - user2301515
@user2301515 我也遇到了同样的问题。我改成了https然后推送,但是当它要求输入密码时,请输入您的个人访问令牌(假设您有一个)。然后就可以推送了。请参见https://docs.github.com/en/get-started/getting-started-with-git/managing-remote-repositories#switching-remote-urls-from-ssh-to-https。虽然如此,我仍然想知道为什么我不能使用我的ssh密钥。 - Frikster

64

我刚刚处理了这个问题。 @user3445140的答案对我很有帮助,但是做的太多了。

  1. 使用cat ~/.ssh/id_rsa.pub获取您的公共SSH密钥。
  2. 复制该密钥,包括"ssh-rsa",但不包括计算机名称在末尾
  3. 转到https://github.com/settings/ssh
  4. 添加您的SSH密钥

我希望我能够投多个赞。你救了我的一天。 - Arpit Patel

33

这对我有用。

首先,删除当前远程:

git remote rm origin

第二步,通过 HTTPS 添加远程仓库,但是 git@xxx :

git remote add origin https://github.com/Sesamzaad/NET.git

那么对我来说,推送已经奏效:

git push origin master

嘿,谢谢。这对我有用。我想这一切都始于我们请了一个人来“帮助”我们创建SSH密钥。 - Daniel L. VanDenBosch
我使用文件凭据,但 git@ 在尝试使用公钥时出现问题。谢谢您的回答。 - Dan Bradbury

27

我通过重新将密钥添加到我的ssh-agent来解决了这个问题。

使用以下命令:

ssh-add ~/.ssh/path_to_private_key_you_generated

由于某些原因,它消失了。


10
ssh-add -k ~/.ssh/id_rsa对我起了作用。 - Dbz
我不得不启动ssh代理,即使Putty在后台运行:$ eval "$(ssh-agent -s)" - Nekeniehl
在像 Ventura 这样的较新版本的 MacOS 上使用 --apple-use-keychain,请参阅 https://docs.github.com/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent。 - AnhellO

16

我正在运行Ubuntu 16.04

使用以下命令删除远程仓库的源:

git remote rm origin

使用设置HTTP URL

git remote add origin https://github.com/<<Entire Path of the new Repo>>

git push origin master

以上步骤已成功将代码添加到仓库中。


这在我的OSX上也起作用了。 - oldfartdeveloper

6

5

这对我有用。迄今为止最简单的解决方案。

如果您正在使用GitHub for Windows并且遇到此错误,则问题可能是您正在尝试在错误的shell或模式下运行命令。如果您在常规命令提示符PowerShell中尝试执行git push origin master,那么就会出现此问题。

您需要在git shell中执行它。只需打开Github for Windows,右键单击,然后选择“在此处打开Shell”。它看起来像一个常规的PowerShell窗口,但实际上不是,这让像我这样的Git新手感到非常困惑。

我希望其他人也会发现这个有用。


1
谢谢。我之前一直很疯狂,因为对我来说 ssh -T git@github.com 可以工作,但是 push origin master 却不行。原因是我在 cygwin64 窗口中执行,而不是在 git bash 中执行... - 2072

5

1
我按照你的步骤后,需要执行以下操作才能使其正常工作:git remote set-url origin git@github.com:UserName/AppName.git - Tracy Zhou

3
为了明确起见,从个人计算机连接到git存储库有两种方式:
1. 使用SSH连接的格式如下: git@github.com:用户名/存储库名称.git
2. 使用HTTPS连接的格式如下: https://github.com/用户名/存储库名称.git
您有绝对的自由选择最适合您的方法。
如果您选择(1),则必须在个人计算机和git帐户之间建立SSH连接(查找上面的答案以了解如何操作)。
或者,您可以选择(2)并通过HTTPS进行连接,无需在个人计算机上建立SSH,只要您的git帐户已在个人计算机上验证并连接,您就不会遇到“permission denied (public key)”问题。

2
如果您的git帐户中已经生成了ssh密钥,则只需执行以下操作-
ssh-add -k ~/.ssh/id_rsa

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