使用Git时如何解决Permission denied(publickey)错误?

tee*_*ink 582 git ssh ssh-keys public-key

我在Mac Snow Leopard上,我刚刚安装完毕git.

我刚试过

git clone git@thechaw.com:cakebook.git
Run Code Online (Sandbox Code Playgroud)

但这给了我这个错误:

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

我错过了什么?
我也尝试过ssh-keygen没有passphase,但仍然是同样的错误.

Ruf*_*nus 701

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

此信息适用于该问题,但可以应用于支持SSH pubkey身份验证的所有其他git存储库.(例如,参见gitolite,gitlab或github.)

首先,设置您自己的公钥/私钥对.这可以使用DSA或RSA,因此基本上您设置的任何键都可以使用.在大多数系统上,您可以使用ssh-keygen.

  • 首先,您需要进入.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
  • 通过网站将您的密钥添加到您的帐户.
  • 最后设置你的.gitconfig.
    • git config --global user.name "bob"
    • git config --global user.email bob@... (不要忘记重新启动命令行以确保重新加载配置)

多数民众赞成你应该克隆和结帐.

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

用户之前是否已生成ssh公钥/私钥对?

  • 检查您的github或gitlab帐户设置上已授权的密钥
  • 告知必须从本地计算机关联哪个对应的私钥

eval $(ssh-agent -s)

告诉钥匙的位置

ssh-add ~/.ssh/id_rsa

  • 如果仍然不起作用,你需要`ssh-add~/.ssh/id_rsa`. (22认同)
  • 我遇到了keygen的问题.它对全局env变量中的电子邮件地址敏感.如果您遇到此问题,您将需要在第一步中为您的github帐户指定电子邮件地址:ssh-keygen -t rsa -C"your_email@youremail.com" (6认同)
  • 好.这实际上不是一个git,而是一个ssh同步问题.我和Assembla一样,你的链接帮我解决了.谢谢 ! (5认同)
  • 在 Linux 上使用 `xclip` 进行复制只能通过执行以下列出的 `xclip -sel clip < ~/.ssh/id_rsa.pub` 来工作:https://help.github.com/articles/generating-ssh-keys (2认同)
  • @cryanbhu https://unix.stackexchange.com/a/23116 (2认同)
  • 如果您使用 PowerShell,“复制到剪贴板”步骤可以是“cat id_rsa.pub | Set-Clipboard`,或者更强大的是,`Get-Content id_rsa.pub | 设置剪贴板`。 (2认同)

mes*_*lds 205

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

ssh -vT git@github.com
Run Code Online (Sandbox Code Playgroud)

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

  • 这不能解决任何问题.我仍然在OP的问题中得到错误. (7认同)
  • 该命令可以帮助您解决问题,它不是一个神奇的修复 - 这个换我的开关. (4认同)
  • 我对你这个神奇的命令感激不尽。它显示 ssh 使用了错误的 ID,即使在使用“ssh-add -D”删除所有内容之后也是如此。 (3认同)
  • 我的问题与我的服务器使用不同的密钥有关。使用上述命令确定问题后,我修复了配置文件中的 IdentificationFile 并且它起作用了。 (2认同)
  • 显示 github 试图使用哪个密钥进行身份验证。v 有帮助 (2认同)
  • 我不能说这解决了任何事情,但这是一个有趣的命令,并且可以与GitHub Enterprise一起使用。 (2认同)
  • 就我而言,Windows 上的 `ssh -vT git@gitlab.com` 显示它正在寻找 rsa 密钥,但我的 .ssh 目录中只有一个 dsa 密钥。 (2认同)
  • 谢谢你!通过运行您提供的命令,我发现我的“~/.ssh/config”被其他一些测试程序修改了并且无法恢复。所以我只是删除了“~/.ssh/config”并解决了问题。干杯! (2认同)
  • 确保您正在尝试“ssh”连接到正确的主机。例如,我将公钥正确添加到我的 github 帐户,但我在 githubenterprise.com 而不是 github.com,因此,`ssh -vT git@<yourcompanyname>.githubenterprise.com` 有效,但 `ssh -vT git @github.com` 继续失败。 (2认同)

kav*_*yao 153

当您访问SSH URL(读/写)而不是Git只读URL但您没有对该repo的写访问权时,可能会发生此错误.

有时您只想克隆自己的仓库,例如部署到服务器.在这种情况下,您实际上只需要R​​EAD-ONLY访问权限.但由于这是你自己的回购,GitHub可能会显示SSH URL,如果这是你的偏好.在这种情况下,如果您的远程主机的公钥不在您的GitHub SSH密钥中,您的访问权将被拒绝,预计会发生这种情况.

同样的情况是当您尝试使用SSH URL克隆其他人没有写访问权限的repo时.

总之,如果您的目的是克隆一个repo,请使用HTTPS URL(https://github.com/{user_name}/{project_name}.git)而不是SSH URL(git@github.com:{user_name}/{project_name}.git),这样可以避免(不必要的)公钥验证.


更新:GitHub现在显示HTTPS作为默认协议,此举可能会减少可能滥用SSH URL的行为.

  • 这对我来说也是如此。谢谢。为了将我的 git 存储库克隆到我的共享托管帐户(1and1)上,我必须使用“git clone https://github.com/MyUserName/MyRepo.git”,只需单击存储库 URL 右侧的文本链接即可Github 页面上显示“_您可以使用 HTTPS、SSH 或 Subversion 进行克隆。_”。(单击_HTTPS_ 获取链接,而不是默认的_SSH_。) (2认同)
  • 我不明白..为什么 SSL URL 需要读取和写入权限才能克隆? (2认同)

jar*_*ora 95

github帮助链接帮我解决了这个问题.看起来ssh密钥没有添加到ssh-agent.这就是我最终做的事情.

命令1:

确保已启用ssh-agent.该命令在后台启动ssh-agent:

eval "$(ssh-agent -s)"
Run Code Online (Sandbox Code Playgroud)

命令2:

将SSH密钥添加到ssh-agent:

ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

  • 在升级到OSx El Capitan到Sierra后,这对我有用. (7认同)
  • 升级到macOS Sierra之后为我工作=) (6认同)
  • 这是**真正的解决方案**,4年后(在[19年1月11日](https://stackoverflow.com/posts/2643584/revisions)),它被复制+粘贴到接受的答案,所以这是值得的我们所有的赞成票! (3认同)

wtj*_*wtj 31

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

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

要了解您是否遇到这种情况,请通过以下方式检查您的软件版本:

ssh -V
git --version
Run Code Online (Sandbox Code Playgroud)

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

长话短说

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

Host <remote>
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)

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

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

Host <remote>
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)

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


仅供参考,我在访问 Gitee.com 时遇到了此提示消息,该网站在其服务器上使用并已在此处golang.org/x/crypto/ssh发布了有关此问题的页面(普通话)。

git@gitee.com: Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)


Gop*_*ika 26

如果没有解决请尝试这个

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

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

  • 这是我发现克隆存储库的最简单方法之一。谢谢。git 克隆 https://&lt;TOEKN&gt;@github.com/USERNAME/REPOSITORY.git (2认同)

Wou*_*ofs 22

这对我有用:

ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)


小智 21

得到相同的错误报告.

修复了使用HTTP而不是.因为我不想为测试PC设置"SSH密钥".

克隆时将URL更改为HTTP:

git clone https://github.com/USERNAME/REPOSITORY.git
Run Code Online (Sandbox Code Playgroud)

我的问题有点不同:我在将现有本地存储库添加到远程时设置了URL,方法是:

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git
Run Code Online (Sandbox Code Playgroud)

要解决此问题,请将URL重置为HTTP:

git remote set-url origin https://github.com/USERNAME/REPOSITORY.git
Run Code Online (Sandbox Code Playgroud)

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

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)
Run Code Online (Sandbox Code Playgroud)

希望这会对像我这样的人有所帮助.:d


cri*_*mbo 21

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

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

Permission denied (public key)在尝试从 github 和 ssh.dev.azure.com 克隆或拉取时收到错误,我按照所有说明操作并验证我的 SSH 密钥是否正确设置(从 SSH 的角度来看)使用ssh -vT git@github.comssh -vT git@ssh.dev.azure.com。并且仍然收到这些错误:

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

Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)

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

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

修复是:

git config --global core.sshCommand "'C:\Windows\System32\OpenSSH\ssh.exe'"
Run Code Online (Sandbox Code Playgroud)

或者在你的 ~/.gitconfig 中:

[core]
    sshCommand = 'C:\\Windows\\System32\\OpenSSH\\ssh.exe'
Run Code Online (Sandbox Code Playgroud)

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

  • 在安装过程中选择“使用外部 OpenSSH”而不是默认选项“使用捆绑的 OpenSSH”。 (4认同)

Ezr*_*ton 21

Visual guide (Windows)

1 of 2. Git batch side

1.1. Open git batch (Download her) 在此处输入图片说明

1.2. Paste the text below (Change to your GitHub account email)

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

1.3. Press Enter (Accepts the default file location) 在此处输入图片说明

1.4. 单击Enter两次(或设置 SSH 密钥密码 - Gitbub 密码文档

> Enter passphrase (empty for no passphrase): [Type a passphrase]
> Enter same passphrase again: [Type passphrase again]
Run Code Online (Sandbox Code Playgroud)

1.5. 密钥生成:

您的身份信息已保存在 /c/Users/user/.ssh/id_rsa...

1.6. CopySSH 密钥到您的剪贴板。

$ clip < ~/.ssh/id_rsa.pub

2 of 2. Github 网站用户端

在下面 user setting 在此处输入图片说明

SSH and GPG keys=>新的 SSH 密钥在此处输入图片说明

Paste 步骤中的代码 1.6 在此处输入图片说明

完毕 :)

在此处输入图片说明


如果有人不想使用 SSH use HTTPS

在此处输入图片说明

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


Mas*_*ant 19

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

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

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

请访问:https://github.com/settings/ssh

您应该看到至少一个键,其中一个哈希键与您在一分钟前键入ssh-add -l时看到的哈希值之一相匹配.

如果没有,请添加一个,然后重试.


Zee*_*bir 14

我正在努力解决同样的问题,这就是我所做的,我能够克隆回购.我按照这些程序进行了iMac.

第一步:检查我们是否已经拥有公共SSH密钥.

  1. 开放式终端.
  2. 输入ls -al ~/.ssh以查看是否存在现有SSH密钥:

检查目录列表以查看您是否已有公共SSH密钥.默认公共是以下d_dsa.pub,id_ecdsa.pub,id_ed25519.pub,id_rsa.pub之一

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

第2步:生成公共SSH密钥

  1. 开放式终端.
  2. 使用您用于github的有效电子邮件地址输入followong命令 ssh-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键时.这接受默认文件位置.当它提示Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]Just再次按回车键时.在提示符下,键入安全密码.
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]如果您不想Enter same passphrase again: [Type passphrase again]再次按Enter键,请按Enter键

这将产生 id_rsa.pub

第3步:将SSH密钥添加到ssh-agent

  1. Interminal类型 eval "$(ssh-agent -s)"
  2. 将SSH密钥添加到ssh-agent.如果您使用的是现有SSH密钥而不是生成新的SSH密钥,则需要将命令中的id_rsa替换为现有私钥文件的名称.输入此命令$ ssh-add -K ~/.ssh/id_rsa

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

  1. 在终端中输入带有ssh文件名的命令pbcopy < ~/.ssh/id_rsa.pub这将把文件复制到剪贴板现在打开你的github帐户转到设置> SSH和GPG密钥>新建SSH密钥输入标题并从剪贴板粘贴密钥并保存.瞧,你已经完成了.

  • 最后,在在这里和那里阅读了一小时后,一步一步的解决方案......效果很好。请记住添加您的 github 密码作为步骤中的密码,否则每次都必须手动添加 (4认同)
  • Windows 用户复制通过: cat ~/.ssh/id_rsa.pub | 夹子 (3认同)

Ric*_*pal 13

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

   Permission denied (publickey).
   fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

我修复它的方法是更改​​我的Mac上的文件/ etc/ssh_config.从

ForwardAgent no 
Run Code Online (Sandbox Code Playgroud)

ForwardAgent yes
Run Code Online (Sandbox Code Playgroud)


Wil*_* Hu 12

我遇到了同样的问题,因为我被认为之间的差异SSHHTTPS

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

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

所以我只是通过更改为url的结尾更改从HTTPS更改为SSH.https://ssh://

但事实是:

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

git@github.com:USERNAME/REPOSITORY.git
Run Code Online (Sandbox Code Playgroud)

这意味着我改变ssh://github.com/USERNAME/REPOSITORY.gitgit@github.com:USERNAME/REPOSITORY.git它的工作原理.

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


Har*_*vey 11

始终检查 GitHub 上的 SSH 密钥生成过程,而不是某些过时的博客

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

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

ssh-keygen -t ed25519 -C "your_email@example.com"
Run Code Online (Sandbox Code Playgroud)

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


kes*_*lal 10

使用ghie Github官方CLI的解决方案

gh安装

brew install gh

gh 登录或通过 cli 进行身份验证

gh auth login

回购克隆

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

例子:gh repo clone keshavdulal/sample-repo

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


Kan*_*arp 8

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

sudo cp ~/.ssh/* /root/.ssh/
Run Code Online (Sandbox Code Playgroud)


Viz*_*llx 7

最简单的方法之一

去终端-

  git push <Git Remote path> --all
Run Code Online (Sandbox Code Playgroud)


Sat*_*ati 7

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

  1. 打开 Git Bash。

  2. 生成公钥:

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

    clip < ~/.ssh/id_rsa.pub
    
    Run Code Online (Sandbox Code Playgroud)
  4. 浏览器,转到 Github => 配置文件 => 设置 => SSH 和 GPG 密钥 => 添加密钥

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

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

    ssh -T git@github.com
    
    Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

谢谢!


Jas*_*son 6

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


And*_*rew 6

您是否在公司环境中?您的系统变量最近是否有变化?根据这个答案,ssh键位于%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub。因此,如果%HOMEDRIVE%最近更改过,git不会知道在哪里寻找您的密钥,因此也不知道所有身份验证内容。

尝试跑步ssh -vT git@github.com。请注意的identity file位置。对我来说,这是指向不是我正常的\Users\MyLogin,而是一个网络驱动器,因为更改在网络层面推动环境变量。

解决方案?由于我的新文件%HOMEDRIVE%具有与本地文件相同的权限,因此我只将.ssh文件夹移动到了那里,并称之为一天。


Tii*_*RUS 6

我帮助了以下内容:

  1. 打开终端(Git Bash
  2. 删除目录中的所有文件.ssh或重命名并创建新.ssh文件夹。
  3. 请按照说明的步骤进行操作:
    1. 生成新的 SSH 密钥
    2. 将 SSH 密钥添加到 ssh-agent

系统:Windows 10。


gMa*_*ale 5

基本的GIT指令没有引用SSH密钥的东西.根据上面的一些链接,我找到了一个git帮助页面,逐步解释了如何为各种操作系统执行此操作(链接将检测您的操作系统并重定向,相应):

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

它介绍了GITHub所需的所有内容,并提供了详细的解释,例如"为什么在创建RSA密钥时添加密码".我想我会发布它,以防它帮助别人......


vik*_*ngh 5

伙计这就是它对我有用的方式:

1-打开终端并转到用户[见附图]

2-打开.ssh文件夹并确保它没有像id_rsa或id_rsa.pub这样的文件,否则有时它不会正确地重写文件

3 - git --version [检查git安装和版本]

4- git config --global user.email"你的电子邮件ID"

5- git config --global user.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 push这样的命令,你就不会使用你生成的相同密钥

在此输入图像描述

在此输入图像描述


Niz*_* B. 5

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

 git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git
Run Code Online (Sandbox Code Playgroud)


duh*_*ime 5

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

chmod -R 700 /home/ec2-user/
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

890424 次

最近记录:

5 年,9 月 前