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