当前位置: 首页 > news >正文

ssh: connect to host github.com port 22: Connection refused

ssh: connect to host github.com port 22: Connection refused

问题现象

本文以Windows系统为例进行说明,在个人电脑上使用Git命令来操作GitHub上的项目,本来都很正常,突然某一天开始,会提示如下错误ssh: connect to host github.com port 22: Connection refused。

$ git pull ssh: connect to host github.com port 22: Connection refused
fatal: Could not read from remote repository. ​ Please make sure you
have the correct access rights and the repository exists.

排查思路

ssh: connect to host github.com port 22: Connection refused这个错误提示的是连接github.com的22端口被拒绝了。

原本以为http://github.com挂了,但是浏览器访问http://github.com一切正常。

网上搜索这个报错,发现很多人遇到这个问题,大概有2个原因和对应解决方案:

1、使用GitHub的443端口

22端口可能被防火墙屏蔽了,可以尝试连接GitHub的443端口。
打开git bash
在这里插入图片描述

$ vim ~/.ssh/config

# Add section below to it
Host github.comHostname ssh.github.comPort 443

$ ssh -T git@github.com
Hi xxxxx! You’ve successfully authenticated, but GitHub does not
provide 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,所以要尝试这个方案的小伙伴先执行这条命令测试下。

2、使用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.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.113.4 github.com

查找http://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解析被运营商劫持了
  • 使用了科学上网工具
    按照我上面写的解决方案操作即可解决。

References

  • https://chaxuri.com/archives/43.html
  • https://stackoverflow.com/questions/15589682/ssh-connect-to-host-github-com-port-22-connection-timed-out
  • https://docs.github.com/en/authentication/troubleshooting-ssh/error-permission-denied-publickey
  • https://gist.github.com/Tamal/1

相关文章:

  • PGSQL主键序列
  • Hypervisor 和Docker 还有Qemu有什么区别与联系?
  • 鸿蒙开发案列一
  • 基本的 Socket 模型
  • 反序列化字符串逃逸(上篇)
  • 【.NET Core】深入理解异步编程模型(APM)
  • python基础 - 变量
  • 78.网游逆向分析与插件开发-背包的获取-背包类的C++还原与获取物品名称
  • Python基础之文件操作(I/O)
  • html 3D 倒计时爆炸特效
  • mac os电脑用n切换node版本
  • 【ARM 嵌入式 C 入门及渐进7 -- C代码中的可变参数宏详细介绍】
  • 【0247】PG内核checkpoint实现机制分析(2)
  • QT发送request请求
  • Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • Druid 在有赞的实践
  • ECMAScript入门(七)--Module语法
  • golang中接口赋值与方法集
  • HomeBrew常规使用教程
  • JS题目及答案整理
  • Python连接Oracle
  • Python中eval与exec的使用及区别
  • redis学习笔记(三):列表、集合、有序集合
  • 闭包--闭包作用之保存(一)
  • 编写高质量JavaScript代码之并发
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 前端性能优化--懒加载和预加载
  • 首页查询功能的一次实现过程
  • Python 之网络式编程
  • UI设计初学者应该如何入门?
  • 昨天1024程序员节,我故意写了个死循环~
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #每天一道面试题# 什么是MySQL的回表查询
  • #在 README.md 中生成项目目录结构
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (七)Knockout 创建自定义绑定
  • (十八)三元表达式和列表解析
  • (转)http-server应用
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *1 计算机基础和操作系统基础及几大协议
  • .md即markdown文件的基本常用编写语法
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 分布式技术比较
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NetCore项目nginx发布