配置好SSH公私钥后,Git 通过SSH 协议与github.com 连接
SSH 链接代码
ssh -T git@github.com
给出的错误信息
ssh: connect to host github.com port 22: Connection refused
1.尝试与gitee.com进行连接,成功,因此应该不是公私钥的问题.
2.更改端口
ssh -T -p 443 git@ssh.github.com
同样失败
ssh: connect to host github.com port 443: Connection refused
若是成功连接,可以通过修改.ssh/config配置文件从而用端口443连接,增加如下信息
Host github.com
Hostname ssh.github.com
Port 443
3.尝试使用http协议克隆仓库
git clone https://github.com/yourname/yourRepositoryname.git
同样失败
fatal: unable to access 'https://github.com/yourname/yourRepositoryname.git/': failed to connect to github.com port 22 after 2076 ms: connection refused
而在gitee.com上却成功进行了克隆
这里的解决方案都来自于网络,特此声明,不是原创,只是记录一个找bug的过程,对我启发挺大。
网上的招都没用,只能自力更生了。
既然和GitHub建立ssh连接的时候提示connection refused,那我们就详细看看建立ssh连接的过程中发生了什么
可以使用ssh -v命令,-v表示verbose,会打出详细日志。
$ ssh -vT git@github.com
OpenSSH_9.0p1, OpenSSL 1.1.1o 3 May 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com [::1] port 22.
debug1: connect to address ::1 port 22: Connection refused
debug1: Connecting to github.com [127.0.0.1] port 22.
debug1: connect to address 127.0.0.1 port 22: Connection refused
ssh: connect to host github.com port 22: Connection refused
从上面的信息马上就发现了诡异的地方,连接http://github.com的地址居然是::1和127.0.0.1。前者是IPV6的localhost地址,后者是IPV4的localhost地址。
到这里问题就很明确了,是DNS解析出问题了,导致http://github.com域名被解析成了localhost的ip地址,就自然连不上GitHub了。
Windows下执行ipconfig /flushdns 清楚DNS缓存后也没用,最后修改hosts文件,增加一条github.com的域名映射搞定。
140.82.112.4 github.com
查找http://github.com的ip地址可以使用https://www.ipaddress.com/来查询
给出了正确地址140.82.112.4(这是目前2022年5月的ip地址,看起来应该是会改变的,因为我看到别人3月份写的文章是140.82.113.4)
也可以使用nslookup命令
nslookup github.com 8.8.8.8
nslookup是域名解析工具,8.8.8.8是Google的DNS服务器地址。
但是给出的却是错误地址
服务器: dns.google
Address: 8.8.8.8
非权威应答:
名称: github.com
Addresses: ::1
127.0.0.1
直接使用 nslookup github.com
就会使用本机已经设置好的DNS服务器进行域名解析
本机给出的也是错误地址
ipconfig /all可以查看本机DNS服务器地址。
这个问题其实就是DNS解析被污染了,有2种可能:
DNS解析被运营商劫持了
使用了科学上网工具
按照我上面写的解决方案操作即可解决。