一、现象
二、原因分析
Permission denied (publickey) 没有权限的publickey ,出现这错误一般是以下两种原因
-
- 客户端与服务端未生成 ssh key
- 客户端与服务端的ssh key不匹配
三、解决办法
我们新生成一个ssh key就可以了
依次执行如下命令
1、打开git bash,
右击桌面空白处,选择【git bash】
2、进入ssh 路径下
cd ~/.ssh
3、生成新的ssh key
输入如下命令,youremail@example.com改为自己的邮箱
ssh-keygen -t rsa -C "youremail@example.com"
然后回车,途中会让你选择生成的ssh key的存放目录和输入密码,不用管,直接回车。
这里有个坑,需要把原来生成的ssh key文件删除,否则不会生成新key的时候,会报文件已存在而导致无法生成新的key。一般ssh key的文件路径都是【C:\Users\username\.ssh\id_rsa】,其中username是你这个用户的用户名。如果没找到,可以先执行如下命令,回车后,系统会告诉你路径。
4、执行命令
ssh -v git@github.com
最后会出现
git@github.com: Permission denied (publickey).
5、执行命令
ssh-agent -s
知识点:
ssh-agent的角色就是帮忙存储、查找并发送对应的指纹而已,也就是说它是一个连接的转发人,扮演的是一个代理的角色。
使用ssh-agent后,可以通过ssh-add命令向ssh-agent注册本机的私钥,ssh-agent会自动推导出这个私钥的指纹(实际上是ssh-add计算的)保存在自己的小本本里(内存),以后只要ssh连接某主机(某用户),将自动转发给ssh-agent,ssh-agent将自动从它的小本本里查找私钥的指纹并将其发送给服务端(sshd端)。如此一来,ssh客户端就无需再指定使用哪个私钥文件去连接。
6、将新生成的ssh key添加到ssh-agent
ssh-add ~/.ssh/id_rsa
坑:
如果这时出现【Could not open a connection to your authentication agent.】
则先执行下【eval `ssh-agent -s`】,再执行【ssh-add ~/.ssh/id_rsa】就可以了
7、创建ssh key
打开刚刚生成的id_rsa.pub文件,复制里面的内容
进入你的github账号:https://github.com/settings/keys
settings→SSH and GPG keys→new SSH key,
title随便取一个名字,然后将id_rsa.pub里的内容复制到Key中,完成后Add SSH Key。
坑:
如果添加key失败,提示【Key is invalid. You must supply a key in OpenSSH public key format】格式错误。
则在bash下执行命令【cat id_rsa.pub】然后复制key,再去github上添加
8、验证
ssh git@github.com
成功了
9、再次执行git get,成功了