[注意:前面都是废话,重点在后面的解决方案]
背景
这几天在学习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。