云服务器无法访问GitHub的解决办法

云服务器无法拉取 GitHub 仓库的代码,并且 ping github.com 超时

环境说明

特殊说明:如果是买的腾讯云的服务器,请直接提问题工单给售后小哥,小哥会火速给你解决,并且网速飞快;当然如果想自己折腾,可以进行下面的操作

  • 云服务器厂商:天翼云

    当初一定是脑袋被门夹了,才会买天翼云的服务器,没有背景的个人不要妄图国企有什么服务了

  • 操作系统:CentOS 7.6

解决思路

主要是通过定时更改系统 hosts 文件来解决访问 GitHub 超时的问题

GitHub 上有一个维护 GitHub 最新 hosts 的仓库:https://github.com/ineo6/hosts

他在文档中有写一个解决办法,通过 SwitchHosts 来自动更新

但是在 Linux 上我们完全可以写一个简单脚本 + 定时任务来解决这个事情:

  • 脚本负责备份并更新系统 hosts 文件
  • 添加一个定时执行脚本的定时任务,每天更新 hosts,保持最新

具体操作

  1. 编写备份更新系统 hosts 脚本,根据自己实际情况修改 sys_hosts_path 和 sys_hosts_back 变量,一个是系统 hosts 文件地址,另一个是备份后的地址

    1
    2
    3
    4
    5
    # 先找个目录放脚本
    [root@iviyothrrp72bw1a update-github-hosts]# pwd
    /opt/scripts/update-github-hosts
    [root@iviyothrrp72bw1a update-github-hosts]# vim update_github_hosts.sh
    # 写入以下内容
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/bin/bash
    sys_hosts_path="/etc/hosts"
    sys_hosts_back="/etc/hosts.bak"
    echo "正在备份原 hosts 文件..."
    mv $sys_hosts_path $sys_hosts_back
    echo "原 hosts 文件备份完成!"
    echo "开始更新 Github Hosts 信息"
    # 写入hosts里面默认的数据 一定要根据实际情况修改,就是原 /etc/hosts 中有几行内容,这里面就写入几行
    echo "::1 localhost localhost.localdomain localhost6 localhost6.localdomain6" > $sys_hosts_path
    echo "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4" >> $sys_hosts_path
    echo "127.0.0.1 iviyothrrp72bw1a iviyothrrp72bw1a" >> $sys_hosts_path
    # 再写入最新的 github hosts 内容
    curl https://gitlab.com/ineo6/hosts/-/raw/master/next-hosts >> $sys_hosts_path
    echo "更新完毕!"
  2. 添加系统定时任务

    1
    2
    3
    4
    5
    6
    # 进入编辑 Linux 定时任务
    crontab -e
    # 写入以下内容 意思是每天执行 然后执行日志会输入到 /opt/scripts/update-github-hosts/update_github_hosts_log 文件中
    0 0 * * * sh /opt/scripts/update-github-hosts/update_github_hosts.sh >> /opt/scripts/update-github-hosts/update_github_hosts_log 2>&1
    # 保存退出,使用以下命令进行验证,出现刚刚编辑的那一条,就代表设置成功
    crontab -l
  3. 第一次可以先执行一下脚本,然后 ping github 进行验证

    1
    2
    3
    4
    5
    6
    7
    8
    # 执行更新脚本
    sh update_github_hosts.sh
    # ping 验证
    [root@iviyothrrp72bw1a update-github-hosts]# ping github.com
    PING github.com (140.82.112.3) 56(84) bytes of data.
    64 bytes from gist.github.com (140.82.112.3): icmp_seq=1 ttl=42 time=205 ms
    64 bytes from gist.github.com (140.82.112.3): icmp_seq=3 ttl=42 time=207 ms
    64 bytes from gist.github.com (140.82.112.3): icmp_seq=4 ttl=42 time=208 ms