Git:使用Git时如何解决权限拒绝(公钥)错误?

我在Mac Snow Leopard上,我刚刚安装了git

我刚试过了

git clone git@thechaw.com:cakebook.git

但这给了我这个错误:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`Permission denied (publickey).fatal: The remote end hung up unexpectedly

我错过了什么?
我也试过做ssh-keygen,没有密码,但还是同样的错误。

1718276 次浏览

如果用户之前没有生成ssh公钥/私钥对

此信息适用于theChaw,但可以应用于所有其他支持SSHpubkey身份验证的git存储库。(例如,请参阅[gitolite][1]、gitlab或github。)

首先设置您自己的公钥/私钥对集。这可以使用DSA或RSA,所以基本上你设置的任何密钥都可以工作。在大多数系统上,您可以使用ssh-keygen。

  • 首先,您需要cd到您的. ssh目录。打开终端并运行:

cd ~/.ssh && ssh-keygen

  • 接下来,您需要将其复制到剪贴板。
  • 在OS X上运行:cat id_rsa.pub | pbcopy
  • Linux运行:cat id_rsa.pub | xclip
  • 在Windows上(通过Cygwin/Git Bash)运行:cat id_rsa.pub | clip
  • 在Windows(Powershell)上运行:Get-Content id_rsa.pub | Set-Clipboard(Thx to@orion elenzil)
  • 通过网站将您的密钥添加到您的帐户。
  • 最后设置您的. gitconfig。
  • git config --global user.name "bob"
  • git config --global user.email bob@...(不要忘记重新启动命令行以确保重新加载配置)

这就是你应该很好的克隆和结帐。

更多信息可以在https://help.github.com/articles/generating-ssh-keys找到(感谢@Lee Whitney)[1]:https://github.com/sitaramc/gitolite

-

如果用户之前设置了ssh公钥/私钥对

  • 检查您的github或gitlab帐户设置已授权哪些密钥
  • 确定必须从您的本地计算机关联哪个相应的私钥

eval $(ssh-agent -s)

  • 定义密钥所在的位置

ssh-add ~/.ssh/id_rsa

更广泛的故障排除甚至自动修复可以通过以下方式完成:

ssh -vT git@github.com

或者,根据下面的评论,我们可以发布:

ssh -vT git@gitlab.com

或者用您的组织正在运行的任何Git实例替换gitlab/github。

来源:https://help.github.com/articles/error-permission-denied-publickey/

基本的GIT说明没有提到SSH关键的东西。在上面的一些链接之后,我找到了一个git帮助页面,它一步一步地解释了如何为各种操作系统执行此操作(该链接将检测您的操作系统并相应地重定向):

http://help.github.com/set-up-git-redirect/

它介绍了GITHub所需的一切,并给出了详细的解释,例如“为什么在创建RSA密钥时添加密码短语”我想我会发布它,以防它对别人有帮助…

使用来自Github的ssh链接,但请确保不要使用ssh附加它,只需使用git hub上的ssh选项卡为您提供的内容来克隆您的存储库。

在Windows上,确保您的所有应用程序都同意HOME。令人惊讶的是,Msys不会为您做到这一点。我不得不设置一个环境变量,因为ssh和git似乎无法就我的. ssh目录的位置达成一致。

注意(至少对于某些项目)您必须有一个带有ssh密钥的github帐户

查看身份验证代理中列出的密钥(ssh添加
(如果您没有看到任何键,请使用ssh-add /path/to/your/key添加一个现有键(例如:添加~/. ssh/id_rsa))
(如果您没有任何密钥,请首先创建一个。请参阅:http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html或只是google ssh-keygen)

验证您是否拥有与您的github帐户关联的密钥

转到:https://github.com/settings/ssh

您应该看到至少一个键,其哈希键与您在一分钟前键入ssh添加时看到的哈希之一相匹配。

如果没有,添加一个,然后再试一次。

当您访问SSHURL(读/写)而不是Git只读URL但您对该存储库没有写访问权限时,可能会发生此错误。

有时你只想克隆自己的存储库,例如部署到服务器。在这种情况下,你实际上只需要只读访问。但由于那是自己存储库,如果你喜欢,GitHub可能会显示SSHURL。在这种情况下,如果你的远程主机的公钥不在你的GitHubSSH密钥中,你的访问将被拒绝,这是预料之中的

一个等效的情况是,当你尝试克隆别人的存储库,你没有写访问SSHURL。

总之,如果您的意图是仅克隆存储库,请使用HTTPS URLhttps://github.com/{user_name}/{project_name}.git)代替SSHURL(git@github.com:{user_name}/{project_name}.git),这避免了(不必要的)公钥验证。


更新:GitHub现在将HTTPS显示为默认协议,此举可能会减少对SSHURL的滥用。

我在尝试运行makefile时得到了类似的权限拒绝(公钥)错误

作为上述SSH步骤的替代方法,您可以安装本机GitHub for Mac应用程序。

点击下载GitHub for Mac从-https://help.github.com/articles/set-up-git#platform-mac

使用git hub帐户完成设置后(我还安装了git hub命令行工具,但不确定是否需要此步骤),然后我收到一封电子邮件-

[GitHub]一个新的公钥已添加到您的帐户

我的错误是固定的。

最简单的方法之一

转到终端-

  git push <Git Remote path> --all

我的情况略有不同,我登录到远程服务器并在服务器上使用git,当我运行任何git命令时,我收到了相同的消息

   Permission denied (publickey).fatal: The remote end hung up unexpectedly

我修复它的方式是通过更改Mac上的文件 /etc/ssh_config。从

ForwardAgent no

ForwardAgent yes

你在企业环境吗?你的系统变量最近是否有可能发生了变化?根据这个的回答,ssh密钥位于%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub。所以如果%HOMEDRIVE%最近发生了变化,git不知道在哪里查找你的密钥,因此所有的身份验证内容。

尝试运行ssh -vT git@github.com。注意identity file的位置。对我来说,这是将没有指向我的正常\Users\MyLogin,而是指向网络驱动器,因为在网络级别推送的环境变量发生了变化。

解决方案?由于我的新%HOMEDRIVE%与我的本地文件具有相同的权限,我只是将我的. ssh文件夹移动到那里,然后收工。

除了Rufinus的回复之外,将ssh键复制到windows中的剪贴板的快捷方式是:

  • type id_rsa.pub | clip

参考:

我也遇到了同样的错误。我的问题是混合在sudo中。

如果不在git clone命令前面加上sudo,我无法自动创建我要克隆的目录。然而,当我这样做时,我的ssh键没有被正确引用。

为了修复它,我通过chmod在我想要包含我的克隆的父目录上设置权限,这样我就可以写入它。然后我运行了没有sudo前缀的git clone。然后它起作用了!之后我更改了权限。完成。

github帮助链接帮助我解决了这个问题。看起来ssh密钥没有添加到ssh代理中。这就是我最终做的。

命令1:

确保启用ssh代理。该命令在后台启动ssh代理:

eval "$(ssh-agent -s)"

命令2:

将SSH密钥添加到ssh代理:

ssh-add ~/.ssh/id_rsa

我刚刚经历了这个问题,而设置我当前的项目,和上述解决方案都不工作.所以我试着看看什么是真正发生在调试列表上使用命令ssh-vTgit@github.com.我注意到我的私钥文件名是不是在列表.所以重命名的私钥文件名'id_rsa'做的工作.希望这可以帮助。

我收到此错误是因为我使用错误的电子邮件生成了ssh密钥。我能够使用ssh连接,但不能使用git。解决方案是使用我github帐户的主电子邮件地址重新生成密钥。

它为我工作。

您的公钥将保存到id_rsa.pub;文件中,并且是您上传到帐户的密钥。您可以通过运行以下命令将此密钥保存到剪贴板:

pb复制<~/. ssh/id_rsa.pub

  • 复制SSH键到剪贴板,返回到门户网站。
  • 在SSH键字段中,粘贴SSH键。
  • 在名称字段中,提供密钥的名称。
  • 保存。

这招对我管用

ssh -i [your id_rsa path] -T github@github.com

伙计们,这就是我的工作方式:

  1. 打开终端并转到用户[见附图]
  2. 打开. ssh文件夹并确保它没有任何文件,如id_rsa或id_rsa.pub否则有时它不会正确重写文件
  3. git--version[检查git安装和版本]
  4. git config--globaluser.email"你的email id"
  5. git config--globaluser.name"你的名字"
  6. git config--list[确保您已设置名称和电子邮件]
  7. cd~/. ssh
  8. ssh-keygen,它提示保存文件,允许它
  9. cat~/. ssh/id_rsa.pub[访问您的公钥并将密钥复制到gerrit设置]

说明:你不应该在Git中使用sudo命令。如果你有很好的理由必须使用sudo,那么请确保你在每个命令中都使用它(此时使用su以获取shell作为root可能更好)。如果你在没有sudo的情况下生成SSH键,然后尝试使用sudo git ush之类的命令,你将不会使用你生成的相同键

在此处输入图片描述

在此处输入图片描述

如果你有一个以上的键,你可能需要做ssh-add private-keyfile

我遇到了同样的问题,因为我认为SSHHTTPS之间的区别是

https://github.com/USERNAME/REPOSITORY.git

ssh://github.com/USERNAME/REPOSITORY.git

所以我只是通过将https://更改为ssh://HTTPS更改为SSH,URL末尾没有任何变化。

但事实是:

https://github.com/USERNAME/REPOSITORY.git
git@github.com:USERNAME/REPOSITORY.git

这意味着我将ssh://github.com/USERNAME/REPOSITORY.git更改为git@github.com:USERNAME/REPOSITORY.git它有效。

愚蠢的错误,但希望能帮助别人!

非常简单。输入下面的命令

ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"

生成SSH密钥。打开文件并复制内容。转到GitHub设置页面,然后单击SSH密钥。单击添加新的SSH密钥,然后将内容粘贴到此处。就是这样:)您不应该再次看到问题。

当您尝试推送到具有不同用户名的存储库时,最简单的解决方案是:

 git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

这对我有用:

ssh-add ~/.ssh/id_rsa

我一直在努力解决同样的问题,这就是我所做的,我能够克隆存储库。我遵循这个过程mac

第一步:检查我们是否已经有公钥SSH。

  1. 打开终端。
  2. 输入ls -al ~/.ssh查看是否存在现有的SSH键:

检查目录列表,查看是否已经有SSH公钥。默认公钥是以下d_dsa.pub、id_ecdsa.pub、id_ed25519.pubid_rsa.pub.

如果没有找到,请转到步骤2,否则请按照步骤3进行

步骤2:生成SSH密钥

  1. 打开终端。
  2. 使用您用于githubssh-keygen -t rsa -b 4096 -C "your_email@example.com"的有效电子邮件地址输入以下命令
  3. 您将在终端Generating public/private rsa key pair中看到以下内容。当它提示"Enter a file in which to save the key,"时按回车键。这接受默认文件位置。当它提示Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]时再次按回车键。
  4. 在提示符下,如果您不想再次按Enter same passphrase again: [Type passphrase again]按回车键,请按 "Type a secure passphrase. Enter passphrase (empty for no passphrase): [Type a passphrase]"按回车键

这将生成id_rsa.pub

第3步:将SSH密钥添加到ssh代理

  1. 终端类型eval "$(ssh-agent -s)"

  2. 将SSH密钥添加到ssh代理。如果您使用的是现有的SSH密钥而不是生成新的SSH密钥,则需要将命令中的id_rsa替换为现有私钥文件的名称。输入此命令$ ssh-add -K ~/.ssh/id_rsa

  3. 现在复制SSH密钥并将其添加到您的github帐户

  4. 在终端中输入此命令,使用您的ssh文件名pbcopy < ~/.ssh/id_rsa.pub这将文件复制到剪贴板现在打开您的github帐户转到设置>SSH和GPG键>新SSH键输入标题并从剪贴板粘贴密钥并保存它。瞧,你完成了。

我能够通过在我的ubuntu系统中遵循以下步骤来解决这个问题。当我在系统中尝试无密码ssh时。

sudo vi /etc/ssh/sshd_config

1)评论如下:#更改为no以禁用隧道明文密码#密码认证是密码验证没有 ----> 评论这个。

2)然后重新启动sshd守护进程,如下所示。

服务sshd重启

Mac的步骤:

  1. 切换用户(sudo su-jenkins)
  2. 生成密钥(ssh-keygen-t rsa-b 4096-C"用户名")。用户名是您正在使用的jenkins。
  3. 复制生成的公钥(cat~/. ssh/id_rsa.pub)。
  4. 将密钥粘贴到git帐户。(设置->SSH和CPG密钥->新建ssh密钥->输入密钥的名称(可以是任何)并将密钥粘贴到描述)。

这个奇怪的错误,在我的情况下是gnome-keyring-daemon错误地命名它需要密码的密钥的症状。

我按照这里概述的步骤,并通过终端输入密码。错误,也就是混淆的GUI界面,得到解决。见:https://askubuntu.com/questions/3045/how-to-disable-gnome-keyring

在我的情况下,我重新安装了ubuntu并且用户名与之前的用户名不同。在这种情况下,生成的ssh密钥也与前一个不同。

只需在存储库中复制当前ssh公钥即可解决问题。该密钥将在您的用户/home/.ssh/id_rsa.pub中可用

在我的MAC中,我解决了这个问题:

cp ~/.ssh/github_rsa ~/.ssh/id_rsa

出于某种原因,我的git停下来在github_rsa文件中查找私钥。这发生在特定的存储库中。我的意思是在其他存储库中,git一直正常工作。

我认为这是一个bug。

我可以找到这种行为运行ssh -vT git@github.com

$ cd ~$ cd .ssh$ chmod 400 id_rsa

让我也分享一下我的经验。

我试图从Gerrit存储库中克隆一些项目,我在帐户设置中获得了公钥。

在第一次尝试git clone时,我得到了以下错误:

Unable to negotiate with XX.XX.XX.XX port XXX: no matching key exchangemethod found. Their offer: diffie-hellman-group1-sha1

我发现我需要以某种方式将SSH选项-oKexAlgorithms=+diffie-hellman-group1-sha1传递给git clone

希望GIT_SSH_COMMAND环境变量完成了这项工作:

export GIT_SSH_COMMAND="ssh -oKexAlgorithms=+diffie-hellman-group1-sha1"

但是git clone仍然没有开始工作…现在它抛出(关于主题):

Permission denied (publickey).

我已经SSH密钥,不想重新生成它们。我检查了与主机的普通SSH连接,可以:

****    Welcome to Gerrit Code Review    ****
Hi XXXXX, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.To clone a hosted Git repository, use:
git clone ssh://xxxxx@xx.xx.xx:xxx/REPOSITORY_NAME.git

我有点困惑。我又开始了,通过-vvv选项打开了SSH的调试。我看到了以下内容:

debug1: read_passphrase: can't open /dev/tty: No such device or address

可能,这是GIT_SSH_COMMAND env变量的开销-我的密钥使用密码保护(并且我在检查git repo主机的登录时输入了它)。

所以,我决定去掉这个短语。一个简单的命令帮助了我:

ssh-keygen -p

然后我输入了“旧密码”的密码,并在“新密码”上按了两次输入,将其留空,即根本没有密码,并确认我的选择。

之后,我在本地磁盘上获得了新克隆的repo。

得到相同的错误报告。

修正了使用HTTPS而不是SSH协议。因为我不想为测试PC设置“SSH键”。

克隆时将URL更改为HTTPS:

git clone https://github.com/USERNAME/REPOSITORY.git

我的问题有点不一样:使用以下方法将现有本地存储库添加到远程时,我将URL设置为SSH

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

要修复它,请将URL重置为HTTPS

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git

顺便说一句,您可以使用命令检查您的URL:

git remote -vorigin  https://github.com/USERNAME/REPOSITORY.git (fetch)origin  https://github.com/USERNAME/REPOSITORY.git (push)

希望能帮助到像我这样的人: D

我遇到这个错误是因为我需要给我当前的工作目录权限700:

chmod -R 700 /home/ec2-user/

以管理员身份执行终端。

如果终端看不到您的. ssh,它将返回该错误。

首先,我建议检查一些标准的东西,比如:

  • 以正确用户身份登录在您的系统中,
  • 正确的私钥在正确的位置在你的系统中。
  • 尝试连接正确的用户名主机名端口
  • 在外部服务器中有位于正确位置的公钥(对于正确的用户)
  • 重新启动ssh服务在您的计算机上:
service ssh restart

(或者以另一种方式,取决于您如何管理系统中的服务…)

这对我来说已经足够了。

我不得不将我的ssh密钥复制到根文件夹。运行Ubuntu 18.04的Google云计算引擎

sudo cp ~/.ssh/* /root/.ssh/

我也犯了同样的错误。

问题是,当将公钥复制到BitBucket时(在我的情况下),末尾的一个不可见的换行符被复制/粘贴。

所以复制公钥的时候,先复制到记事本上,去掉末尾的空行,复制,粘贴。

在MAC中,转到终端

1)使用命令-cd ~导航到主页目录

2)cd. ssh&&ssh-keygen(对于默认值,单击输入/返回键进行两个输入)

Generating public/private rsa key pair.Enter file in which to save the key (/Users/username/.ssh/id_rsa):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /Users/usernmae/.ssh/id_rsa.

3)之后,做“ls”。你会找到id_rsa.pub文件。

4)复制id_rsa.pub文件中的内容(使用cat命令读取-cat id_rsa.pub

5)导航到BitBucket或任何支持SSH键的版本工具。使用添加密钥选项粘贴内容

就是这样。现在试着承诺和推动。

在此处输入图片描述

这些是我在Windows 10中遵循的步骤

  1. 打开Git Bash。

  2. 生成公钥:

    ssh-keygen -t rsa -b 4096 -C "youremailaddress@xyz.com"
  3. 将生成的密钥复制到剪贴板(类似于CTRL+C)

    clip < ~/.ssh/id_rsa.pub
  4. 浏览器,转到Github=>Profile=>设置=>SSH和GPG密钥=>添加密钥

  5. 提供键名并粘贴剪贴板(CTRL+V)。

  6. 最后,测试您的连接(Git bash)

    ssh -T git@github.com

在此处输入图片描述

谢谢!

Windows上的另一种可能性,这些答案中没有涵盖,并且在关于故障排除的git或github文档中也没有涵盖:

git可能使用的openssh可执行文件与您想象的不同。

当我试图从github和ssh.dev.azure.com中克隆或拉取时,我收到了Permission denied (public key)错误,我遵循了所有的说明,并验证了我的SSH密钥是使用ssh -vT git@github.comssh -vT git@ssh.dev.azure.com正确设置的(从SSH的角度来看)。

git@github.com: Permission denied (publickey).fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.

我最终发现问题在于Git for Windows和Windows都有自己的openssh版本。这是记录在这里的:https://github.com/desktop/desktop/issues/5641

我依靠Windows ssh-agent服务来存储我的ssh密钥密码,所以git(使用它的单独版本的openssh)无法读取我的私钥。我认为使用此错误消息是bug-它具有误导性。

解决办法是:

git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"

或者在你的~/. gitconfig中:

[core]sshCommand = 'C:\\Windows\\System32\\OpenSSH\\ssh.exe'

也许这将很快在Windows的git中修复,但这是我第二次在这个问题上浪费时间。

视觉指南(Windows)

1 of 2. Git批处理端

1.1.打开git批处理(下载输入图片描述

1.2.粘贴下面的文字(更改为您的GitHub帐户电子邮件)

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

在此处输入图片描述

1.3.输入(接受默认文件位置)输入图片描述

1.4.单击输入两次(或设置SSH键密码-Gitbub密码句文档

> Enter passphrase (empty for no passphrase): [Type a passphrase]> Enter same passphrase again: [Type passphrase again]

1.5.密钥生成:

您的身份已保存在/c/用户/. ssh/id_rsa…

1.6。复制剪贴板的SSH键。

$ clip < ~/.ssh/id_rsa.pub

2 of 2. Github网站用户端

<0输入图片描述

SSH and GPG keys=>新的SSH键输入图片描述

粘贴步骤1.6的代码输入图片描述

已完成:)

在此处输入图片描述


如果有人不想使用SSHuse HTTPS

在此处输入图片描述

Github文档:https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh

公共/私有配置可能是不正确的。请按照步骤来做。在windows

中的任何位置执行命令
ssh-keygen -o -f ~/.ssh/id_rsa

现在转到c://user/xyz/. ssh/并打开id_rsa键(路径可能会有所不同)现在转到gitlab和user配置文件>设置>ssh密钥并在此处添加您的密钥。现在尝试克隆

对我来说,问题是使用sudo

sudo git clone git@github.com:userName/repo.git导致了上面提到的错误。

所以为了解决这个问题,我把我试图克隆的文件夹改成了

sudo chown -R $USER:$USER /var/www/iqge.org/html

然后用这个git clone git@github.com:userName/repo.git成功完成

当我在工作中获得新计算机或切换工作时,这些都是我遵循设置github访问的步骤。Mac或Windows

-转到https://github.[your WorkDomain]. com。导航到设置→开发人员设置→个人访问令牌
-生成一个新令牌
-设置令牌描述并仅选中范围的“repo”框(这将为您提供repo:状态,repo_deployment,public_repo,repo:邀请访问)

-给定令牌后,复制它(不要导航离开,确认接下来的两步工作)
-尝试再次克隆存储库(使用https)
-对于用户名使用您的用户名
-对于密码,粘贴您复制的令牌
-所有未来的请求现在都可以工作,而无需询问您的用户名和密码。

  • 新建一个文件夹 PC中的任何地方(例如桌面)

  • 移动到那个新文件夹并在那里打开git bash。

&在bash中编写以下代码:

$ git init$ git remote add origin https://github.com/YOUR_GITHUB_HANDLER/YOUR_REPO_NAME.git$ git pull origin master

(查看新文件夹是否拉取文件)

如果文件被拉取,那么首先删除旧文件夹中的所有文件/文件夹(发生所述错误的地方)包括. git文件夹

&从新文件夹中复制所有文件,包括. git并将其粘贴到发生所述错误的旧文件夹中。

这将获取您的远程存储库。

如果您想在不删除本地所做的新更改的情况下获取远程存储库,那么只需复制和粘贴我们的新. git文件夹

现在你可以做$ git push origin master

资源树 Windows案例

如果您在Windows上使用资源树,您需要使用PuTTyGen创建一个新的密钥对

输入图片描述

您应该插入的顶部部分的ssh-rsa

Github => Profile=> Settings => SSH and GPG keys => Add Key

然后保存私钥并将其添加到Pageant(它与SourceTree一起运行)

输入图片描述

仅此而已

完成ssh-keygen部分后,您可以通过以下方式验证:

  1. $ ssh -T git@github.com测试SSH连接;

  2. 确认哪个用户运行了“ssh-keygen”命令。您生成的公钥后面跟着该用户。原因如下:

sudo命令应该与Git一起使用吗?

您不应该在Git中使用sudo命令。如果您有充分的理由必须使用sudo,那么请确保您在每个命令中都使用它(此时使用su以获取shell作为root可能更好)。如果您在没有sudo的情况下生成SSH键,然后尝试使用sudo git ush之类的命令,您将不会使用您生成的相同键。

  1. 确认您拥有存储库将克隆到的目录的写权限。如果没有,请这样做。并且您必须在更新用户组权限后通过注销或su等方式刷新当前用户。

我帮助了以下方面:

  1. 开放终端(gitbash
  2. 删除目录.ssh中的所有文件或重命名并创建新的.ssh文件夹。
  3. 按照说明的步骤:
    1. 生成一个新的SSH密钥
    2. 将SSH密钥添加到ssh代理

系统:Windows 10。

对我来说,实际问题是使用文本编辑器将SSH公钥复制到剪贴板

如果您按照docs.github.com并在Notepad++等文本编辑器中打开. pub文件以复制SSH公钥,那么您将遇到麻烦。

输入图片描述

而是使用

猫~/. ssh/id_***. pub|剪辑

命令复制

我今天在尝试使用git bash在Windows中设置现有存储库时遇到了这个问题。问题是在键入以下内容时:

git clone myreposshurl

在gitbash中,ctrl+c和ctrl+v不起作用。在尝试粘贴存储库URL时,我做了ctrl+v,引入了一些不需要的字符。当我尝试并成功克隆另一个存储库时,终于发现并解决了这个问题。花了1.5个小时才弄清楚这个愚蠢的错误。

\302\226git@github.com: Permission denied (publickey).fatal: Could not read from remote repository.

如果您看到像上面这样的\302字符,那么这可能是一个可能的原因。

使用ghGithub的官方CLI的解决方案

gh安装

brew install gh

gh登录或通过cli认证

gh auth login

仓库克隆

gh repo clone <username or orgname>/<repo-name>

示例:gh repo clone keshavdulal/sample-repo

咆哮:当0号突然决定不再工作时,我也在抨击我的头,我没有耐心或脑力从头开始重新学习ssh/公钥/密码学,只是为了克隆一个我已经可以访问的该死的存储库。也很惊讶没有人在答案中提到gh

如果您的问题最近(2021年下半年)突然出现,则可能是由不兼容的哈希算法引起的。

截至本文(2021年10月),最新的Windows Git版本是2.33.1(发行说明),他采用了最新的OpenSSH 8.8p1(发行说明),反过来,他已经弃用了SHA-1。同时,如果您的远程Git存储库仍然坚持SHA-1,您将无法通过身份验证。

要查看您是否可能陷入这种情况,请通过以下方式检查您的软件版本:

ssh -Vgit --version

然后您应该检查OpenSSH 8.8/8.8p发行说明的“潜在不兼容的更改”部分。

太长别读

解决方案1:通过将其添加到~/.ssh/config文件中再次启用SHA-1:

Host <remote>HostkeyAlgorithms +ssh-rsaPubkeyAcceptedAlgorithms +ssh-rsa

请记住将<remote>替换为远程存储库的主机名。

解决方案2:使用ECDSA或Ed25519而不是RSA重新生成密钥对。例如:

ssh-keygen -t ecdsa -C <comment>

请记住将<comment>替换为您自己的助记短语。然后,将生成的公钥上传到您的远程存储库。


仅供参考,我在访问Gitee.com时遇到了这个提示消息,他们在服务器上使用golang.org/x/crypto/ssh,并发布了一个关于这个问题的页面这里(普通话)。

git@gitee.com: Permission denied (publickey).

我删除了node_modules/package-lock.json和yarn.lock文件。再次运行npm i。这为我解决了问题。

请尝试这个如果没有任何工作

  1. 生成个人访问令牌(Setting -> Developer settings -> Personal access tokens -> Generate new token
  2. git remote set-url origin https://<TOEKN>@github.com/USERNAME/REPOSITORY.git

注意:如果密码弹出,请尝试仅输入令牌(尝试两次)

始终检查GITHUBSSH密钥生成程序,而不是一些过时的博客

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

在这里,您可以看到密钥是通过以下方式生成的:

ssh-keygen -t ed25519 -C "your_email@example.com"

所以算法ed25519不是rsa或其他任何东西。

您可以从在终端中执行以下操作开始:

  1. cd~/. ssh

  2. 通过运行以下命令生成ssh密钥:ssh-keygen-o-t rsa-C"your@email.com"

  3. 当提示输入保存密钥的位置时,输入:catid_rsa.pub|pbCopy

  4. 输入并确认您的密码,然后生成您的新密钥。

  5. 通过运行:cat~/. ssh/id_rsa.pub通知github密钥

  6. 复制输出,然后前往github创建一个新的SSH键。将复制的内容粘贴到文本区域,给它一个合适的标题,然后点击ADD KEY按钮。

现在你可以去你的操作无忧无虑。

我已经用gh进行了身份验证,创建了新密钥,等等。问题是我在Ubuntu中安装了ghsnap,所以生成的新密钥在./snap/gh/502/.ssh/而不是常规的.ssh路径中。

我解决了将所有内容复制到.ssh文件夹的问题:

cp -a ./snap/gh/502/.ssh/* .ssh/

如果没有,用find . -name *.pub找到你的钥匙

我想,在数字世界中,知道你把钥匙放在哪里仍然是一个问题。

这就是我最终能够推动git的方式


对我来说,我一直在

git@github.com: Permission deniedfatal: Could not read from remote
Please make sure you have the correct access rightsand the repository exists.

所以经过几个小时的研究,我发现在生成你的ssh密钥让你的Windows代理识别你的密钥之后,我解决问题的最后一件事就是为那个项目更新git仓库中的ssh-key

因此,您可以登录您的git hub帐户,然后转到您要推送的存储库,然后在设置中查找安全性,您可以在那里添加ssh密钥。对我来说,密钥存储在. ssh/id_ed123939.pub

使用终端在GitHub中添加RSA密钥:

MAC:

  1. 转到文件夹用户/xxxx /.ssh
  2. 运行命令:cd~/. ssh&&ssh-keygen-t ed25519-C"github_email@id.com"
  3. 输入文件名id_rsa
  4. 输入if ask密码
  5. 再次进入
  6. 运行命令val“$(ssh-agent-s)”
  7. 打开配置文件:open~/. ssh/config如果不存在,则创建为:touch~/. ssh/config
  8. #配置文件
  9. 现在打开配置文件并在文件中添加以下行:

主机*AddKeysToAgent是使用钥匙串是id_rsa

  1. 关闭文件

  2. 将ssh私钥添加到代理运行命令:ssh-add-K~/. ssh/id_rsa

  3. 现在复制ssh密钥:<~/. ssh/id_rsa.pub

  4. 转到gitHub/BitBucket

  5. 点击管理账户

  6. 点击SSH键

  7. 删除现有密钥

  8. 点击添加键

  9. 粘贴复制的密钥。