[注意:前面都是廢話,重點在后面的解決方案]
背景
這幾天在學習GitHub,雖然之前用過一段時間,但是感覺好多東西不懂,這個用好了對於工作學習幫助會很大,方便安全。所以想系統的學習下。后續再去了解下gitee(關鍵是速度快)。昨晚搞了一晚上沒解決這問題,今天上午才解決,所以有必要寫一篇文章,雖然大神很多,但是小白也不少,我也是小白之一。
環境
Windows 10企業版
Git
GitHub Desktop
問題
克隆倉庫的時候報錯 Authentication failed. Some common reasons include:
大概意思就是授權失敗,我遇到的這個問題的 主要原因是最后一條:“- If you use SSH authentication, check that your key is added to the ssh-agent and associated with your account.”
嘗試過程
①網上有說“在GitHub Desktop -> Repository -> Repository Settings -> Remote 中將ssh URL改成 https URL即可”,這個菜單壓根就進不去;
②這似乎碰到的不是同一個問題,雖然幫助好多人解決了問題:git中fatal: Authentication failed的問題
③這篇(Authentication Failure with GitHub Desktop #8860)還是挺有用的,奈何全英文當時沒看懂,有個人已經抓到重點了:
④后面基本確認是ssh key的問題,還查看了官方教程 生成新 SSH 密鑰並添加到 ssh-agent 新增 SSH 密鑰到 GitHub 帳戶,本來已經生成了類似id_ed25519.pub的文件,但是還是沒用:
檢查現有 SSH 密鑰:我的開始是按照官方教程生成id_ed25519.pub,沒成功,后來生成的id_rsa_pub才可以,這個具體原因不知,可能是因為上圖提到的系統版本問題,也不深究了。
⑤另外還看過這個,但是我的是有known_hosts 這個文件的。
1 ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
⑥最終解決是在這里:ssh-keygen -t rsa -C"your_email@youremail.com"
對於大多數人來說,上面說的都是廢話.....
解決方案
總結一下步驟:
前提是已經裝好git和GitHub Desktop。
一.先檢查現有 SSH 密鑰:
-
打開 Git Bash。
- 輸入
ls -al ~/.ssh
以查看是否存在現有 SSH 密鑰(這一步也可以直接到文件夾找):1 $ ls -al ~/.ssh 2 # Lists the files in your .ssh directory, if they exist(列出.ssh文件夾里的文件)
3. Git Bash里的結果:
文件夾此時的狀態:
4.結論:缺少公鑰和私鑰對。(如果有了如下公鑰和私鑰對,直接到第三步)。
備注: 如果存在公鑰,默認情況下的公鑰的文件名是以下之一:
二.生成新 SSH 密鑰並添加到 ssh-agent
這里不建議用官網的教程,因為我用后失敗了,這里用這位兄弟寫的教程
1.繼續上面的Git Bash,郵箱就是自己注冊GitHub的郵箱,比如“110@qq.com”,后面要求輸入密碼啥的,直接回車即可:
1 ssh-keygen -t rsa -C "your_email@example.com"
2.此時再在Git Bash輸入
1 ls -al ~/.ssh
得到:
3.到”C:\Users\用戶名\.ssh“,用編輯器打開id_rsa.pub文件,復制里面的一串代碼(全部都要復制)。
4.登錄GitHub賬戶,單擊右上角的頭像,選擇Settings,選擇SSH and GPG keys,然后單擊綠色的“New SSH key”,標題隨便起一個名字,我是家里的機器就填了“Home”。key就是上面一步復制的id_rsa.pub文件里的代碼:
5.然后單擊Add SSH key,會讓你重新輸一遍密碼:
6.最終確認后的結果是這樣:
7.最后一步,測試 SSH 連接,在Git Bash中輸入以下內容:
1 $ ssh -T git@github.com 2 # Attempts to ssh to GitHub
結果為:
說明成功了!現在再去Git Desktop,克隆倉庫就可以了:
備注:如果上面“$ ssh -T git@github.com”有問題,是這樣的:
后記
寫這篇隨筆也用了幾個小時,真正有效的步驟其實就那么幾步,希望能夠幫助到別人吧。后續會學習《Version Control with Git》,這本書是前幾天讀的入門書籍《GitHub入門》推薦的,大概是用命令行來玩GitHub。