首页 文章

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

提问于
浏览
478

我在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

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

30 回答

  • 3

    此信息适用于该问题,但可以应用于支持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 |剪辑通过网站将您的密钥添加到您的帐户 . 最后设置你的.gitconfig . git config --global user.name“bob”git config --global user.email bob @ ...(不要忘记重新启动命令行以确保重新加载配置)多数民众赞成你应该很好克隆和结帐 .

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

  • 12

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

    ssh -vT git@github.com
    

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

  • 1

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

    有时您只想克隆自己的仓库,例如部署到服务器 . 在这种情况下,您实际上只需要READ-ONLY访问权限 . 但由于这是你自己的回购,如果's your preference. In this situation, if your remote host'的公钥不在你的GitHub SSH密钥中,GitHub可能会显示SSH URL,你的访问权将被拒绝, which is expected to happen .

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

    总之, if your intent is to clone-only a repo, use HTTPS URLhttps://github.com/{user_name}/{project_name}.git )而不是SSH URL( git@github.com:{user_name}/{project_name}.git ),这避免了(不必要的)公钥验证 .


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

  • 1

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

    命令1:

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

    eval "$(ssh-agent -s)"
    

    命令2:

    将SSH密钥添加到ssh-agent:

    ssh-add ~/.ssh/id_rsa
    
  • 135

    请注意(至少对于某些项目) you must have a github account with an ssh key .

    查看身份验证代理中列出的密钥(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或只是google ssh-keygen)

    To verify that you have a key associated with your github account

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

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

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

  • 1

    这对我有用:

    ssh-add ~/.ssh/id_rsa
    
  • 5

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

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

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

    ForwardAgent no
    

    ForwardAgent yes
    
  • 83

    得到相同的错误报告 .

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

    克隆时将URL更改为HTTP:

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

    My problem is a little bit different :我在将现有本地存储库添加到远程时设置了URL,方法是:

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

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

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

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

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

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

  • 1

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

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

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

    所以我将 HTTPS 更改为 SSH 只需将 https:// 更改为 ssh:// ,更改了网址末尾没有任何内容 .

    但事实是:

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

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

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

  • 1

    我得到了同样的错误 . 我的问题是在sudo混合 .

    我无法在没有使用sudo前缀git clone命令的情况下自动创建我正在克隆的目录 . 但是,当我这样做时,我的ssh键没有被正确引用 .

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

  • 8

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

  • 168

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

    First Step : Checking if we already have the public SSH key.

    • 开放式终端 .

    • 输入 ls -al ~/.ssh 以查看是否存在现有SSH密钥:

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

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

    Step 2 : Generating public SSH key

    • 开放式终端 .

    • 使用您用于github ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 的有效电子邮件地址输入followong命令

    • 您将在终端 Generating public/private rsa key pair 中看到以下内容 . 当它提示 "Enter a file in which to save the key," 时按Enter键 . 这接受默认文件位置 . 当它提示_1405169时 - 再次按回车键 . 在提示符下,键入安全密码 .

    • Enter passphrase (empty for no passphrase): [Type a passphrase] 如果您不想按 Enter same passphrase again: [Type passphrase again] 再按回车键,请按回车键

    这将生成 id_rsa.pub

    Step 3: Adding your SSH key to the ssh-agent

    • 内部类型 eval "$(ssh-agent -s)"

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

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

    • 在终端中输入带有ssh文件名的命令 pbcopy < ~/.ssh/id_rsa.pub 这会将文件复制到剪贴板现在打开你的github帐户转到 Settings > SSH and GPG keys > New SSH key 输入 Headers 并从剪贴板粘贴密钥并保存 . 瞧,你已经完成了 .
  • 9

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

  • 4

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

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

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

  • 15

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

    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设置]

    Note :你不应该在Git上使用sudo命令 . 如果你有一个很好的理由你必须使用sudo,那么确保你在每个命令中使用它(它's probably just better to use su to get a shell as root at that point). If you generate SSH keys without sudo and then try to use a command like sudo git push, you won' t使用你生成的相同键

    enter image description here

    enter image description here

  • 1

    你在corporate environment吗?您的系统变量最近是否有可能发生变化?按this SO回答,ssh键位于 %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub . 因此,如果 %HOMEDRIVE% 最近发生了变化,git不知道在哪里查找密钥,从而知道所有的身份验证内容 .

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

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

  • 1

    One of the easiest way

    去终端 -

    git push <Git Remote path> --all
    
  • 2

    除了Rufinus的回复之外,在 Windows 中将ssh密钥复制到剪贴板的快捷方式是:

    • type id_rsa.pub | clip

    参考文献:

  • 6

    我在设置当前项目时遇到过这个问题,上述解决方案都没有 . 所以我尝试使用命令ssh -vT git@github.com查看调试列表中发生的事情 . 我注意到我的私钥文件名不在列表中 . 所以将私钥文件名重命名为'id_rsa'来完成这项工作 . 希望这可以帮助 .

  • 1

    如果您有多个密钥,则可能需要执行 ssh-add private-keyfile

  • 565

    它很直接 . 输入以下命令

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

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

  • 5

    我试图运行一个类似的 Permission denied (publickey) error makefile文件 .

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

    点击 Download GitHub for Mac - --1405201_

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

    [GitHub] A new public key was added to your account

    我的错误是固定的 .

  • 1

    它对我有用 .

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

    pbcopy <〜/ .ssh / id_rsa.pub

    • 将SSH密钥复制到剪贴板,返回Web门户 .

    • 在SSH密钥字段中,粘贴SSH密钥 .

    • 在“名称”字段中,提供密钥的名称 .

    • 保存 .

  • 4

    它对我有用

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

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

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

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

    我按照此处列出的步骤操作,并通过终端输入密码 . 错误,即混乱的GUI界面,已得到解决 . 见:https://askubuntu.com/questions/3045/how-to-disable-gnome-keyring

  • 1

    在我的情况下,我重新安装了ubuntu,用户名从以前更改过 . 在这种情况下,生成的ssh密钥也与前一个密钥不同 .

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

  • 12

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

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

    出于某种原因,我的git停止在 github_rsa 文件中找到私钥 . 这发生在一个特定的回购中 . 我的意思是在其他存储库中git保持正常工作 .

    我认为这是一个错误 .

    我发现这种行为正在运行 ssh -vT git@github.com

  • 0

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

    chmod -R 700 /home/ec2-user/
    
  • 17

    使用Github的ssh链接,但确保不用ssh附加它只是使用git hub上的ssh选项卡让你克隆你的repo .

相关问题