服务器访问github受限的解决办法

一、平台说明

为了防止网络抽风连不上github,可以设置代理,

  • Windows/Mac :Winodws和Mac上可以使用'switchhosts'。它自带有图形化界面(所以没有图像化界面的机器用不了),使用方法可以参考switchHost使用指南
  • Linux : 对于没有图形化界面的linux服务器可以使用fastgithub,参考下面这里fastgisthub使用指南
    为防止链接失效,这里再给一个备份的使用sh脚本,直接运行就可以(保存为.sh然后chmod u+x赋予权限之后,用sudo指令执行,还不会建议问大D老师)。
二、fastgithub脚本封装

另外注意下,这个是从国内gitee的一个仓库上找的fastgithub的安装包,仓库没了的话需要自己修改脚本中的URL,替换为别的包的下载地址。

bash 复制代码
#!/usr/bin/env bash
set -euo pipefail

VERSION="2.1.4"
INSTALL_DIR="/opt"

HTTP_PROXY_VALUE="http://127.0.0.1:38457"
HTTPS_PROXY_VALUE="http://127.0.0.1:38457"
NO_PROXY_VALUE="localhost,127.0.0.1,::1"

ARCH="$(uname -m)"
if [[ "$ARCH" == "aarch64" || "$ARCH" == "arm64" ]]; then
  ZIP_NAME="fastgithub_linux-arm64.zip"
  APP_DIR="${INSTALL_DIR}/fastgithub_linux-arm64"
else
  ZIP_NAME="fastgithub_linux-x64.zip"
  APP_DIR="${INSTALL_DIR}/fastgithub_linux-x64"
fi

URL="https://gitee.com/chcrazy/FastGithub/releases/download/${VERSION}/${ZIP_NAME}"
ZIP_PATH="${INSTALL_DIR}/${ZIP_NAME}"

SERVICE_NAME="fastgithub.service"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}"

if [[ "${EUID}" -ne 0 ]]; then
  echo "请用 root 执行:sudo $0"
  exit 1
fi

echo "[1/8] 安装依赖(unzip/wget/systemd)"
if command -v apt-get >/dev/null 2>&1; then
  apt-get update -y
  apt-get install -y unzip wget ca-certificates
elif command -v dnf >/dev/null 2>&1; then
  dnf install -y unzip wget ca-certificates
elif command -v yum >/dev/null 2>&1; then
  yum install -y unzip wget ca-certificates
else
  echo "未识别的包管理器,请手动安装 unzip 和 wget"
fi

echo "[2/8] 写入全局代理环境变量:/etc/environment(新登录会话生效)"
cp -a /etc/environment "/etc/environment.bak.$(date +%F_%H%M%S)" 2>/dev/null || true
cat > /etc/environment <<EOF
http_proxy=${HTTP_PROXY_VALUE}
https_proxy=${HTTPS_PROXY_VALUE}
HTTP_PROXY=${HTTP_PROXY_VALUE}
HTTPS_PROXY=${HTTPS_PROXY_VALUE}
no_proxy=${NO_PROXY_VALUE}
NO_PROXY=${NO_PROXY_VALUE}
EOF

# 让"当前脚本进程"也立即使用这些变量(不等重新登录)
set -a
# shellcheck disable=SC1091
source /etc/environment
set +a

echo "[3/8] 下载:${URL}"
mkdir -p "${INSTALL_DIR}"
wget -c -O "${ZIP_PATH}" "${URL}"

echo "[4/8] 解压到:${INSTALL_DIR}"
unzip -o -d "${INSTALL_DIR}" "${ZIP_PATH}"

echo "[5/8] 删除压缩包:${ZIP_PATH}"
rm -f "${ZIP_PATH}"

BIN="${APP_DIR}/fastgithub"
if [[ ! -x "${BIN}" ]]; then
  echo "ERROR: 找不到可执行文件:${BIN}"
  echo "请检查解压后的目录结构:ls -lah ${INSTALL_DIR}"
  exit 1
fi

echo "[6/8] 写入 systemd 服务文件(开机自启)"
cat > "${SERVICE_FILE}" <<EOF
[Unit]
Description=FastGithub
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=root
Group=root

Environment="http_proxy=${HTTP_PROXY_VALUE}"
Environment="https_proxy=${HTTPS_PROXY_VALUE}"
Environment="HTTP_PROXY=${HTTP_PROXY_VALUE}"
Environment="HTTPS_PROXY=${HTTPS_PROXY_VALUE}"
Environment="no_proxy=${NO_PROXY_VALUE}"
Environment="NO_PROXY=${NO_PROXY_VALUE}"

WorkingDirectory=${APP_DIR}
ExecStart=${BIN}

Restart=on-failure
RestartSec=2

[Install]
WantedBy=multi-user.target
EOF

echo "[7/8] 重新加载 systemd 并启动服务"
systemctl daemon-reload
systemctl enable --now "${SERVICE_NAME}"

echo "[8/8] 输出服务状态与环境变量"
systemctl status "${SERVICE_NAME}" --no-pager -l || true
echo
echo "service env:"
systemctl show "${SERVICE_NAME}" -p Environment --no-pager
echo
echo "global env (/etc/environment):"
grep -E '^(http_proxy|https_proxy|HTTP_PROXY|HTTPS_PROXY|no_proxy|NO_PROXY)=' /etc/environment || true
三、注意事项

本质是是走代理,不要指望速度多快,有个几百k的速度算比较不错了,看代码足够了。

另外如果pip设置了代理,上面的操作可能导致代理失效,这个时候可以修改服务器的~/.bashrc,加入下面的一段

bash 复制代码
proxy_on() {
  export http_proxy="http://127.0.0.1:7890"
  export https_proxy="http://127.0.0.1:7890"
  export all_proxy="socks5://127.0.0.1:7890"
  export no_proxy="localhost,127.0.0.1,::1,*.tuna.tsinghua.edu.cn"
  echo "proxy on, can connect to github but may cause pip install failure"
}

proxy_off() {
  unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
  echo "proxy off, can not connec to github"
}

然后source ~/.bashrc,这样以后要上github就proxy_on,要pip下东西就是proxy_off,其他的设置代理也是同理。

相关推荐
roman_日积跬步-终至千里3 小时前
【LangGraph4j】LangGraph4j 核心概念与图编排原理
java·服务器·数据库
野犬寒鸦3 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
HalvmånEver3 小时前
Linux:线程互斥
java·linux·运维
JY.yuyu4 小时前
Docker常用命令——数据卷管理 / 端口映射 / 容器互联
运维·docker·容器
alice--小文子4 小时前
cursor-mcp工具使用
java·服务器·前端
lpruoyu4 小时前
【Docker进阶-06】docker-compose & docker swarm
运维·docker·容器
China_Yanhy5 小时前
入职 Web3 运维日记 · 第 8 日:黑暗森林 —— 对抗 MEV 机器人的“三明治攻击”
运维·机器人·web3
艾莉丝努力练剑5 小时前
hixl vs NCCL:昇腾生态通信库的独特优势分析
运维·c++·人工智能·cann
酉鬼女又兒5 小时前
每天一个Linux命令_printf
linux·运维·服务器
翼龙云_cloud5 小时前
国际云代理商:2026年国际云注册风控升级实战指南 8 大平台无卡解决方案对比
服务器·阿里云·云计算