文章482
标签257
分类63

关于使用Git时push/pull超时, 以及Github访问慢的解决办法

最近在使用Git向github提交代码的时候总是卡顿, 出现SSH连接超时的情况, 一开始以为是因为网络缘故, 后来发现是ssh本身配置的问题!

阅读本篇你将学会:

  • 加速国内Github访问的方法
  • 解决git push/pull卡死
  • 解决git push/pull ssh连接超时
  • ……


前言

最近一段时间发现在使用git向github提交代码或者拉取代码的时候, 往往要等相当长的一段时间, 甚至有时会出现SSH超时的情况!

如下图, 命令一直停留, 直到超时:

pull卡死


一开始以为是因为在国内访问github的时候由于丢包, 或者连接不稳定导致的问题, 所以先使用ssh命令做了一下连接测试:

ssh -T git@github.com

Hi JasonkayZK! You've successfully authenticated, but GitHub does not provide shell access.

最后返回的是可以通过ssh授权! 说明ssh没什么问题!


之后又通过mtr命令查看了一下路由和丢包情况, 如图:

mtrGithub

结果显示, 虽然延迟在265ms左右, 但是并没有很严重的丢包! 应该大概率也不会是网络的原因.


最后经过查找大量的博客, 最后发现是由于ssh配置导致的问题!!!



一. 解决git连接github超时问题

1. 修改ssh配置[解决问题]

在等待git pull命令超时之后报出了类似: ssh: connect to host github.com port 22: Connection timed out的错误!

原因是: ssh 阻塞了22端口!

解决方法: 修改 ssh 的配置文件

关于修改配置,存在两种解决方法:

  • /etc/ssh/ssh_config 中修改全局配置
  • 在用户主目录下.ssh/中添加配置文件

这里选择的后者:

cd ~/.ssh/
vi config

# 在config中添加下面内容
Host github.com  
User git  
Hostname ssh.github.com 
PreferredAuthentications publickey  
IdentityFile ~/.ssh/id_rsa 
Port 443

即: 使用https的443端口进行访问!

对我来说解决了问题! 当然网上还有其他的解决方法, 我试了之后都未解决!


2. 先pull再push[未解决]

网上有说先pull(即使提醒Everything is up-to-date)!

但是对于我来说, pull和push一样都会卡死, 所以并未解决我的问题!


3. 添加sendpack.sideband属性[未解决]

网上还有解决方法是: 添加sendpack.sideband属性并置为false

# 全局的
git config --global sendpack.sideband false
# 仓库的
git config --local sendpack.sideband false

通过git config --local -l 查看仓库级配置,可以看到有sendpack.sideband这一项并且是置为false的!

git config --local -l 

笔者尝试过之后, 还是未解决问题!



二. 加速国内Github访问

由于某些原因,国内访问Github会异常缓慢,在clone仓库时甚至只有10k以下的速度,下载半天有时还会失败需要从头再来,甚是让人恼火。

本小节介绍通过修改系统hosts文件的办法,绕过国内dns解析,直接访问GitHub的CDN节点,从而达到加速的目的.

1. 获取GitHub官方CDN地址

打开https://www.ipaddress.com/

查询以下三个链接的DNS解析地址:

github.com 
assets-cdn.github.com 
github.global.ssl.fastly.net

DNS解析地址

记录下查询到的IP地址!


2. 修改系统Hosts文件

修改系统的Hosts文件:

  • Linux: /etc/hosts
  • Windows: C:\Windows\System32\drivers\etc
sudo vi /etc/hosts

# 添加下面三行
192.30.253.112    github.com
151.101.72.133    assets-cdn.github.com
151.101.193.194    github.global.ssl.fastly.net

*注: *

  • 需管理员权限
  • 注意IP地址与域名间需留有空格
  • 上面为(2019.10.10查询的IP, 时间不同可能有变化!!!)

3. 刷新系统DNS缓存

Linux下:

sudo /etc/init.d/networking restart

Windows下:

Windows+X 打开系统命令行(管理员身份)或powershell

运行 ipconfig /flushdns 手动刷新系统DNS缓存:

win刷新系统DNS缓存


完成, 现在打开Github,clone一个项目到本地试试吧!



附录

参考文章:


本文作者:Jasonkay
本文链接:https://jasonkayzk.github.io/2019/10/10/关于使用Git时push-pull超时-以及Github访问慢的解决办法/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可