前言
今天本想研究下mit6.824,可是却死活clone不下来,这件事还要从我使用uTools的github加速插件开始说起,不过太长了就不说了。
我们直接步入正题,以下是我的报错:
$ ssh -T git@github.com
Unable to negotiate with 218.31.200.47 port 22: no matching host key type found. Their offer: ssh-rsa
翻译过来就是
无法与218.31.200.47端口22进行协商:没有找到匹配的主机密钥类型。他们的报价:SSH-RSA
可能的原因
-
修改了DNS代理,也就是常说的 hosts 文件。
-
修改DNS代理后使用移动热点连接了笔记本或者电脑。(条件如下)
- 在系统WIFI设置中开启了随机硬件地址。
- 开启 2.1 后若还是有问题 说明修改的 Hosts 无效。
-
公钥和私钥不匹配、或者过期了。
-
被墙了,需要使用科学上网工具。
看看你的问题出现在了哪里?
我的问题出现在 2.1 和 2.2,我修改 Hosts 文件后使用手机热点链接,也开启了随即硬件地址。
1.Hosts 文件
Hosts 文件的原理和作用
可以先看下这位博主的文章,我就不复述了。修改host文件的作用和原理 - w先森的文章 - 知乎
解决方法
在文件管理器中打开目录 C:\Windows\System32\drivers\etc 会看到以下文件
HOSTS 无法直接修改,需要更改权限!我们右键它
点击 属性 -> 安全 -> 找到 Users 勾选完全控制
点击确定然后应用
测试github
再次clone下来,成功!!
$ git clone git@github.com:eraft-io/eraft.git -b mit6824_lab
Cloning into 'eraft'...
remote: Enumerating objects: 8053, done.
remote: Counting objects: 100% (2067/2067), done.
remote: Compressing objects: 100% (967/967), done.
remote: Total 8053 (delta 929), reused 1983 (delta 910), pack-reused 5986
Receiving objects: 100% (8053/8053), 87.40 MiB | 3.06 MiB/s, done.
Resolving deltas: 100% (3375/3375), done.
2.关闭随机硬件地址
关于动态IP
动态IP(就是游动IP上网.在某一个网段内每次上网获取的IP地址都有变化),那负责分配动态IP的DHCP服务会自动获取DNS地址
自动获得了DNS地址,然后你本地又换了,就可能导致不可用
关于静态IP
静态IP(也就是固定IP上网)的时候.DNS是无法自动获取后填充到相应位置的.所以需要手动设置~
关闭随机硬件地址
链接: 如何关闭使用随机硬件地址-百度经验 (baidu.com)
测试github
再次clone下来,成功!!
$ git clone git@github.com:eraft-io/eraft.git -b mit6824_lab
Cloning into 'eraft'...
remote: Enumerating objects: 8053, done.
remote: Counting objects: 100% (2067/2067), done.
remote: Compressing objects: 100% (967/967), done.
remote: Total 8053 (delta 929), reused 1983 (delta 910), pack-reused 5986
Receiving objects: 100% (8053/8053), 87.40 MiB | 3.06 MiB/s, done.
Resolving deltas: 100% (3375/3375), done.
3.重新绑定公钥
将本地的ssh-key全删了,这个删除起来也不费劲,到用户的.ssh目录下面全删了就行。
随后我们开始生成密钥, 官方文档: 生成新的 SSH 密钥并将其添加到 ssh 代理 - GitHub Docs
这里加密算法要注意,可能会提示你使用新的,我这里使用的是新的加密算法。
生成密钥
我是win11系统,几经折腾命令行里也提示我使用新的加密算法
$ ssh-keygen -t ed25519 -C "你的邮箱地址"
当出现以下提示的时候按三下回车,都是名称和和一些加密辅助字段的事情。
Generating public/private ed25519 key pair
绑定公钥
随后我们将公钥放到 github 中,公钥在 ~/ssh/id_ed25519.pub 目录中
右上角的头像 -> Settings -> SSH and GPG keys -> New SSH key 把刚才复制的公钥粘贴到上面
测试github
再次clone下来,成功!!
$ git clone git@github.com:eraft-io/eraft.git -b mit6824_lab
Cloning into 'eraft'...
remote: Enumerating objects: 8053, done.
remote: Counting objects: 100% (2067/2067), done.
remote: Compressing objects: 100% (967/967), done.
remote: Total 8053 (delta 929), reused 1983 (delta 910), pack-reused 5986
Receiving objects: 100% (8053/8053), 87.40 MiB | 3.06 MiB/s, done.
Resolving deltas: 100% (3375/3375), done.
4.科学上网
测试终端链接
我们 curl 一下 Google
$ curl www.google.com
超时了,意味着没联上梯子
设置终端代理
set all_proxy=socks5://127.0.0.1:1081
再次测试,这次测试成功了
测试github
再次clone下来,成功!!
$ git clone git@github.com:eraft-io/eraft.git -b mit6824_lab
Cloning into 'eraft'...
remote: Enumerating objects: 8053, done.
remote: Counting objects: 100% (2067/2067), done.
remote: Compressing objects: 100% (967/967), done.
remote: Total 8053 (delta 929), reused 1983 (delta 910), pack-reused 5986
Receiving objects: 100% (8053/8053), 87.40 MiB | 3.06 MiB/s, done.
Resolving deltas: 100% (3375/3375), done.
如果有其他问题 欢迎在评论区讨论!