Git SSH链接被拒 原因详解

807 阅读2分钟

前言

今天本想研究下mit6.824,可是却死活clone不下来,这件事还要从我使用uToolsgithub加速插件开始说起,不过太长了就不说了。

我们直接步入正题,以下是我的报错:

$ 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




可能的原因

  1. 修改了DNS代理,也就是常说的 hosts 文件。

  2. 修改DNS代理后使用移动热点连接了笔记本或者电脑。(条件如下)

    1. 在系统WIFI设置中开启了随机硬件地址
    2. 开启 2.1 后若还是有问题 说明修改的 Hosts 无效。
  3. 公钥和私钥不匹配、或者过期了。

  4. 被墙了,需要使用科学上网工具。



看看你的问题出现在了哪里?

我的问题出现在 2.1 和 2.2,我修改 Hosts 文件后使用手机热点链接,也开启了随即硬件地址





1.Hosts 文件

Hosts 文件的原理和作用

可以先看下这位博主的文章,我就不复述了。修改host文件的作用和原理 - w先森的文章 - 知乎



解决方法

在文件管理器中打开目录 C:\Windows\System32\drivers\etc 会看到以下文件

image.png

HOSTS 无法直接修改,需要更改权限!我们右键它

点击 属性 -> 安全 -> 找到 Users 勾选完全控制

点击确定然后应用

image.png



测试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

超时了,意味着没联上梯子

image.png



设置终端代理

set all_proxy=socks5://127.0.0.1:1081

再次测试,这次测试成功了

image.png



测试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.


如果有其他问题 欢迎在评论区讨论!