问题
问题背景是我电脑前段时间恢复了,然后当时创建了个ssh key为默认名字的,也就是id_rsa,将这个key当做我云开发机的ssh key了。
今天另外创建了个ssh key,给github用的,所以命名为id_github结果,出现了下面的问题,以前创建的时候叫id_rsa是没问题的,难道是名字的原因。
$ ssh -T [email protected]
[email protected]: Permission denied (publickey).
打印下日志,给刚才的命令加个-v
:
$ ssh -T -v [email protected]
...
...
debug1: Authentications that can continue: publickey
debug1: Trying private key: /c/Users/26519/.ssh/id_dsa
debug1: Trying private key: /c/Users/26519/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/26519/.ssh/id_ed25519
debug1: Trying private key: /c/Users/26519/.ssh/id_xmss
debug1: No more authentication methods to try.
[email protected]: Permission denied (publickey).
最后的debug信息显示没有更多的认证信息可以尝试了,也就是说他没有找到并且尝试我的id_github的私钥,就认为我的public key没法匹配private key。
解决方法
-
如果你不在乎id_rsa已经创建,覆盖无关紧要的,重新创建一个id_rsa就行了,这个方案简单直接,一路回车,再将id_rsa添加到github账户里面去,问题解决。
ssh-keygen -t rsa -C "[email protected]"
注意:如果比如
id_rsa
已经用在别的地方了,比如我用在自己阿里云服务器的ssh登录认证上面了,那就不能随便覆盖了,所以不希望覆盖直接从第2点开始。 -
id_rsa
已经存在又不想删的,那以我的id_github
举例子比如我用
ssh-keygen
创建了一个ssh key,命名为id_github
,并且确定我已经将id_github
添加到我的github账户中,那么开始输入下面的命令,将:ssh-add ~/.ssh/id_github
如果添加成功了,那么恭喜,问题解决~,如果没有,且错误如下的话:
$ ssh-add ~/.ssh/id_github Could not open a connection to your authentication agent.
-
为了解决ssh-add错误的问题,那么接下来使用以下命令:
eval `ssh-agent -s`
-
ssh-agent -s
的含义:生成Bourne shell 风格的命令输出。$ ssh-agent -s SSH_AUTH_SOCK=/tmp/ssh-1qBx03Ny81LR/agent.16268; export SSH_AUTH_SOCK; SSH_AGENT_PID=11460; export SSH_AGENT_PID; echo Agent pid 11460;
-
eval
:扫描命令行(可能不止扫描一次),将变量进行替换,再执行命令。# eval作用,举个例子 # 不用eval是什么结果 $ PIPE="|" $ ls $PIPE wc -l ls: cannot access '|': No such file or directory ls: cannot access 'wc': No such file or directory # 使用eval,PIPE会被替换为|之后再执行 # 这个时候PIPE替换后就被认为是管道 $ eval ls $PIPE wc -l
所以那句命令的效果等同于:
# eval `ssh-agent -s`效果等同于下面几条命令 export SSH_AUTH_SOCK=/tmp/ssh-1qBx03Ny81LR/agent.16268 export SSH_AGENT_PID=11460 echo Agent pid 11460
-
-
上一步做完了,这时候再次尝试执行添加私钥
$ ssh-add ~/.ssh/id_github Identity added: /path/to/.ssh/id_github # 添加成功了
-
验证是否成功
$ ssh -T [email protected] Hi jo-qzy! You've successfully authenticated, but GitHub does not provide shell access.
额外步骤
如果上述步骤做下来没问题,如果是Mac OS和Linux那这个错误就差不多解决了(并没有完全解决),但是电脑重启这个问题又会出现,最要命的是在Windows下面很不巧,这个问题在每次打开git bash后,又会重新出现,都需要上面流程走一遍,因此还需要额外的几步,当然我的方法可能不是最好的,不过俺也没有别的更好的方法。。。
-
已知每次打开终端都会执行
.bahrc
,那在该文件后面加两句就行# Add id_xxx to ssh-agent eval `ssh-agent -s` > /dev/null 2>&1 ssh-add ~/.ssh/id_github > /dev/null 2>&1
至此,问题解决。。。应该是有更好的方式,我觉得这个方式有点挫,不过能解决。
声明:小声BB,我的解决方法并不适用所有人,请先查看日志再去网上找对应的解决方法,无脑套解决方法是不对的。之前写的其他的问题的解决方法,有人在下面评论:试了不行的,还有甚者私信我解决方案不行,试了之后自己删了什么东西过来找我,说我把他电脑搞坏的,我晕,要不我给你寄个新电脑过去。。。最讨厌的就是无脑套解决方案的人。。。。本人对任何无脑使用解决方案的人拒绝理会,有其他问题欢迎讨论~~