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,我的解決方法並不適用所有人,請先查看日誌再去網上找對應的解決方法,無腦套解決方法是不對的。之前寫的其他的問題的解決方法,有人在下面評論:試了不行的,還有甚者私信我解決方案不行,試了之後自己刪了什麼東西過來找我,說我把他電腦搞壞的,我暈,要不我給你寄個新電腦過去。。。最討厭的就是無腦套解決方案的人。。。。本人對任何無腦使用解決方案的人拒絕理會,有其他問題歡迎討論~~

發佈了90 篇原創文章 · 獲贊 97 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章