修复DNS污染导致无法通过ssh连接github的问题
某天因为在手机上改过了blog的内容,然后就想在电脑上pull过来:
看到refused的时候咱整个人是懵的,于是测试了一下连接:
起初咱还以为是ssh key炸了,但是连接gitee和huggingface都是没有问题的:
删掉github上面的公钥重新添加当然也没任何效果。
看一下连接日志,发现问题了:
被DNS搞了,搞去127.0.0.1了;那解决方案就显而易见了:换个公共DNS,或者手动改hosts。
公共DNS网上搜一下随便挑一个就行,像什么114还有阿里什么的都可以考虑。
但是咱担心改全局DNS可能影响访问其它网站的速度和延迟,所以还是单独改hosts吧。
首先获取到目标网站的ip地址:这里推荐使用https://dnschecker.org/, 可以看到服务器的位置,便于挑选地理位置最近的服务器


然后接下来就是编辑hosts文件了,Linux直接用root权限编辑/etc/hosts
就行,Windows如果是火绒用户,火绒提供了快捷入口,否则需要先用管理员权限打开任意编辑器,然后打开C:\Windows\System32\drivers\etc\hosts
文件编辑;安卓手机没有root权限的话比较麻烦,下文再提。
1 |
|
编辑完成后再测试一下连接,已经可以正常通了:
碎碎念:用ssh连接clone大项目的时候网速慢的出奇,所以还是挂代理然后用https吧,ssh主要是push的时候认证比较方便。
下载软件Virtual Hosts, F-droid 上有更新的版本。软件开源但是作者在Google Play上收费340日元。
然后可以直接使用远端hosts和DNS(如果连接不上谷歌的8.8.8.8可以换成别的),也可以在任意目录(建议Documents文件夹)创建一个文本文件填入hosts内容导入进去,之后启动即可。



这里可以查询实时的情况。
截至2025年4月20日,
github.com受影响的区域:广东移动,广东电信,云南移动;新疆传统墙中墙解析出来的ip莫名其妙的不知道能不能一样用(貌似是随机污染,有时候也能正常解析到microsoft服务器):




- 生成ssh密钥,Windows现在已经内置了openssh所以不需要专门配置ssh客户端: 参数解释:
1
ssh-keygen -t ed25519 -C "youremail@example.com"
-t ed25519
: 指定密钥使用的加密类型。如果不加指定,默认使用ed25519,该算法性能最强的同时安全性也最好,同时占用空间也较小。虽然理论上可能对旧系统兼容性不好,但是即使是Ubuntu20.04预装的openssh8.2中,ed25519也可以正常使用(虽然该版本默认使用的是rsa)。有其它的算法可选:dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa
-C "youremail@example.com"
:仅作为注释,但是换成自己的邮箱会有标志作用。 - 接下来会询问两个选项,第一个是路径,直接回车保持默认就好,但是把路径记录下来后面会用到;
第二个是询问密码,直接回车不设置密码,否则之后使用ssh操作时会额外询问这个密码(应该不会有人需要这么变态的安全性吧) - 去到上一步记录下来的路径,通常会是用户文件夹下面的
.ssh
文件夹,里面会有一对密钥,id_ed25519
是私钥,id_ed25519.pub
是公钥。
妥善保存好私钥不要泄漏;
打开公钥把整个文件的内容复制下来。 - 前往github的个人设置,在左侧找到
SSH and GPG keys
,点击New SSH key
,在Title
选项随意填,Key
选项填上刚刚复制的 SSH 公钥,再点Add SSH key
保存。 - 在本地测试连接:
1
2ssh -T git@github.com
ssh -T git@ssh.github.com