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个回答

2

如果其他答案没有帮助,请尝试运行git remote -v

如果你看到:

origin  https://github.com/<name/repo.git> (fetch)
origin  https://github.com/<name/repo.git> (push)

(原始链接以https或http开头)

运行git remote set-url origin git@github.com:<name/repo.git>

然后再次执行git push


这并没有回答问题。它已经说了它正在使用那种形式而不是https。如果在https上,它会完全跳过公钥检查,而是要求输入用户名/密码。 - Jerven Clark

1

我可以通过ssh连接到git@github.com,并返回成功的窗口,但无法将任何内容推送到github,服务器返回以下信息:

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

我如何解决这个问题:

删除原始内容并重新添加它:

git remote rm origin

git remote add origin git@github.com:<xxxx>/<xxxx>.git

git branch -M main
git push -u origin main

终端返回:
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 16 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 321 bytes | 321.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:ShowTimeWalker/MyFirstTrailForGit.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

1
这个错误发生在使用Windows上的Ubuntu Bash时。
我切换到标准的Windows命令提示符,没有错误。
这是一个解决方法,意味着如果你想使用Ubuntu,你可能需要在Ubuntu环境中加载ssh私钥。

我最近转到了Windows系统,在使用VSCode和Git-bash时遇到了问题。我将Github的URL直接复制到Windows命令提示符中,神奇地工作了。然后我将在cmd中工作的相同命令复制到git-bash中,而没有任何解释,它也起作用了。 - futureapricot

1
解决方案: 您需要在您的git-hub个人资料中添加ssh密钥。按照以下步骤解决此问题:
  1. 右键单击要推送到git的文件夹
  2. 选择git-bash here选项
  3. 输入ssh-keygen命令生成您的密钥
  4. 从cmd中复制密钥或前往(C:/User/your_user/.ssh/)
  5. 用记事本打开id.rsa文件
  6. 复制您的密钥
  7. 现在前往您的git-hub个人资料
  8. 进入设置
  9. 选择SSH and Gpg keys
  10. 选择New ssh key选项
  11. 在标题字段中添加window-key
  12. 将您的密钥粘贴到标题字段下面的描述部分
  13. 保存

现在您已经准备好推送您的文件夹了

  1. 现在进入您要上传的文件夹
  2. 右键单击该文件夹
  3. 选择“git bash here”
  4. git init
  5. git add README.md
  6. git commit -m“first commit”
  7. git remote add origin https://github.com//
  8. git push -u origin master

希望这对您有所帮助



1
如果您的私钥位于~/.ssh中,并已添加到https://github.com/settings/ssh,但仍无法通过ssh提交到Github repo,请确保将它们添加到您的ssh-agent:
ssh-add -k ~/.ssh/[PRIVATE_KEY]

你可以为多个服务器(例如 Bitbucket 和 GitHub)添加多个私钥,当处理 git 时,它将使用正确的私钥。

0
设置全局变量
export GIT_SSH_COMMAND="ssh -v"

现在你可以看到使用了哪些键。例如,使用

git remote show origin

如果你和我一样遇到了同样的问题,你会看到:
debug1: send_pubkey_test: no mutual signature algorithm

这可以用以下方法解决

PubkeyAcceptedKeyTypes +ssh-rsa

在你的

~/.ssh/config

或者通过生成更好的密钥。


0
如果您已经将公钥添加到GITHUB服务器,则可以尝试其他解决方案。
在我的情况下,从RUBYMINE内部进行GIT PUSH失败,但从终端窗口执行此操作解决了问题。
有关更多解决方案,请访问此页面: https://github.com/gitlabhq/gitlabhq/issues/4730

0

我遇到了同样的问题。请让你的朋友通过进入他的仓库设置并添加新的合作者来将你添加为合作者。

你会收到一封邀请邮件,请接受它。然后你就可以开始了。 只要确保你已经添加了正确的远程地址。


0
为了部署到您朋友的仓库,您需要将您的公钥添加到该仓库的部署密钥中。
前往该仓库,进入“部署密钥”,并将id_rsa.pub(或您的公钥文件名)添加到“部署密钥”中。
我认为,将密钥添加到您自己的帐户中只允许您写入由您的帐户创建的存储库。如果它是由组织创建的,则需要将密钥添加到该仓库的部署密钥中。

https://developer.github.com/v3/guides/managing-deploy-keys/


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