Github出现Permission denied (publickey).

问题

问题背景是我电脑前段时间恢复了,然后当时创建了个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。

解决方法

  1. 如果你不在乎id_rsa已经创建,覆盖无关紧要的,重新创建一个id_rsa就行了,这个方案简单直接,一路回车,再将id_rsa添加到github账户里面去,问题解决。

    ssh-keygen -t rsa -C "[email protected]"
    

    注意:如果比如id_rsa已经用在别的地方了,比如我用在自己阿里云服务器的ssh登录认证上面了,那就不能随便覆盖了,所以不希望覆盖直接从第2点开始。

  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. 
    
  3. 为了解决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
    
  4. 上一步做完了,这时候再次尝试执行添加私钥

    $ ssh-add ~/.ssh/id_github
    Identity added: /path/to/.ssh/id_github # 添加成功了
    
  5. 验证是否成功

    $ ssh -T [email protected]
    Hi jo-qzy! You've successfully authenticated, but GitHub does not provide shell access.
    

额外步骤

如果上述步骤做下来没问题,如果是Mac OS和Linux那这个错误就差不多解决了(并没有完全解决),但是电脑重启这个问题又会出现,最要命的是在Windows下面很不巧,这个问题在每次打开git bash后,又会重新出现,都需要上面流程走一遍,因此还需要额外的几步,当然我的方法可能不是最好的,不过俺也没有别的更好的方法。。。

  1. 已知每次打开终端都会执行.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,我的解决方法并不适用所有人,请先查看日志再去网上找对应的解决方法,无脑套解决方法是不对的。之前写的其他的问题的解决方法,有人在下面评论:试了不行的,还有甚者私信我解决方案不行,试了之后自己删了什么东西过来找我,说我把他电脑搞坏的,我晕,要不我给你寄个新电脑过去。。。最讨厌的就是无脑套解决方案的人。。。。本人对任何无脑使用解决方案的人拒绝理会,有其他问题欢迎讨论~~

发布了89 篇原创文章 · 获赞 96 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/Boring_Wednesday/article/details/104281150
今日推荐