问题景象
本文以Windows零碎为例进行阐明,在个人电脑上应用Git命令来操作GitHub上的我的项目,原本都很失常,忽然某一天开始,会提醒如下谬误ssh: connect to host github.com port 22: Connection refused
。
$ git pullssh: connect to host github.com port 22: Connection refusedfatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.
排查思路
ssh: connect to host github.com port 22: Connection refused
这个谬误提醒的是连贯github.com
的22端口被回绝了。
本来认为github.com挂了,然而浏览器拜访github.com一切正常。
网上搜寻这个报错,发现很多人遇到这个问题,大略有2个起因和对应解决方案:
应用GitHub的443端口
22端口可能被防火墙屏蔽了,能够尝试连贯GitHub的443端口。
$ vim ~/.ssh/config```# Add section below to itHost github.com Hostname ssh.github.com Port 443```$ ssh -T git@github.comHi xxxxx! You've successfully authenticated, but GitHub does notprovide shell access.
这个解决方案的思路是:给~/.ssh/config
文件里增加如下内容,这样ssh连贯GitHub的时候就会应用443端口。
Host github.com Hostname ssh.github.com Port 443
如果~/.ssh
目录下没有config文件,新建一个即可。
批改完~/.ssh/config
文件后,应用ssh -T git@github.com
来测试和GitHub的网络通信是否失常,如果提醒`Hi xxxxx! You've successfully authenticated, but GitHub does not
provide shell access.` 就示意一切正常了。
然而,这个计划在我这里行不通,批改后还是提醒ssh: connect to host github.com port 443: Connection refused
。
这个计划无效的前提是:执行命令ssh -T -p 443 git@ssh.github.com
后不再提醒connection refused
,所以要尝试这个计划的小伙伴先执行这条命令测试下。
应用https协定,不要应用ssh协定
在你的GitHub的本地repo目录,执行如下命令:
$ git config --local -e
而后把外面的url配置项从git格局
url = git@github.com:username/repo.git
批改为https格局
url = https://github.com/username/repo.git
这个其实批改的是repo根目录下的./git/config
文件。
然而这个办法在我这里同样不失效。
解决方案
网上的招都没用,只能自力更生了。既然和GitHub建设ssh连贯的时候提醒connection refused
,那咱们就具体看看建设ssh连贯的过程中产生了什么,能够应用ssh -v
命令,-v
示意verbose,会打出具体日志。
$ ssh -vT git@github.comOpenSSH_9.0p1, OpenSSL 1.1.1o 3 May 2022debug1: Reading configuration data /etc/ssh/ssh_configdebug1: Connecting to github.com [::1] port 22.debug1: connect to address ::1 port 22: Connection refuseddebug1: Connecting to github.com [127.0.0.1] port 22.debug1: connect to address 127.0.0.1 port 22: Connection refusedssh: connect to host github.com port 22: Connection refused
从下面的信息马上就发现了诡异的中央,连贯github.com的地址竟然是::1
和127.0.0.1
。前者是IPV6的localhost地址,后者是IPV4的localhost地址。
到这里问题就很明确了,是DNS解析出问题了,导致github.com域名被解析成了localhost的ip地址,就天然连不上GitHub了。
Windows下执行ipconfig /flushdns
分明DNS缓存后也没用,最初批改hosts文件,减少一条github.com的域名映射搞定。
140.82.113.4 github.com
查找github.com的ip地址能够应用https://www.ipaddress.com/来查问,也能够应用nslookup
命令
nslookup github.com 8.8.8.8
nslookup
是域名解析工具,8.8.8.8
是Google的DNS服务器地址。间接应用
nslookup github.com
就会应用本机曾经设置好的DNS服务器进行域名解析,ipconfig /all
能够查看本机DNS服务器地址。
这个问题其实就是DNS解析被净化了,有2种可能:
- DNS解析被运营商劫持了
- 应用了迷信上网工具
依照我下面写的解决方案操作即可解决。
开源地址
文章和示例代码开源在GitHub: Go语言高级、中级和高级教程。
公众号:coding进阶。关注公众号能够获取最新Go面试题和技术栈。
集体网站:Jincheng's Blog。
知乎:无忌。
References
- https://chaxuri.com/archives/...
- https://stackoverflow.com/que...
- https://docs.github.com/en/au...
- https://gist.github.com/Tamal...