惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
博客园 - 三生石上(FineUI控件)
V
V2EX
有赞技术团队
有赞技术团队
V
Visual Studio Blog
小众软件
小众软件
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
量子位
T
Tailwind CSS Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cisco Talos Blog
Cisco Talos Blog
I
Intezer
Project Zero
Project Zero
A
Arctic Wolf
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
L
Lohrmann on Cybersecurity
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tor Project blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security @ Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
Help Net Security
Help Net Security
N
News | PayPal Newsroom
W
WeLiveSecurity
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog

lvbibir's Blog

shell | 磁盘空间分析脚本 Linux cat 和 tee 命令写入文件 python | 使用 uv 管理你的 python 环境 Claude Code 完整配置指南 windows | mihomo 内核独立部署指南 linux | 磁盘扩容 wsl | 释放长久运行占用的磁盘空间 mysql | 线程上限问题处理 麒麟 7.6 安装谷歌 OTP 认证模块 suse 12sp5 升级 openssh 及 openssl suse 12sp5 部署 mysql 5.7 《谁的青春不迷茫》 docker | centos7 部署 docker vim | 基础配置和使用 windows | rime 输入法 & 雾凇方案 shell | sshpass 批量传输文件及执行命令 wsl | 原生 linux 方式安装 docker nodejs | fnm + pnpm 开发环境配置 wsl | 安装配置 miniconda 虚拟环境 wsl | bashrc 环境变量不正确加载的处理方法 wsl | win10 安装 wsl2 troubleshooting | ssh 成功但是 scp 失败 linux | 常用命令总结 docker 部署 piclist shell | 检测网站存活并自动钉钉告警 Zabbix | 监控端口连通性并自动追踪 TCP 路由 windows | 自定义开机快速启动项 windows | miniconda 配置 python 虚拟环境 Zabbix | 监控主机到指定 ip 的流量大小 shell | centos 初始化 loki (二) 部署 loki (一) 简介 prometheus (六) Alertmanager prometheus (五) 记录规则与告警规则 prometheus (四) 黑盒监控 prometheus (三) 服务发现 prometheus (二) 静态配置 prometheus (一) 简介及部署 traefik (四) TraefikService 服务 traefik (三) Middleware 中间件 traefik (二) ingressRoute 路由 traefik (一) 简介、部署和配置 kubernetes | Gateway API 简介及部署 linux | dns 配置文件中 search 和 options ndots 详解 kubernetes | command args 和 dockerfile 中的 ENTRYPOINT CMD kubernetes | statefulset 控制器详解 docker | dockerfile 最佳实践 docker | dockerfile 指令详解 linux | kill 命令详解以及 linux 中的信号 troubleshooting | elasticsearch 安装插件报错 shell | if 条件判断 docker | 下载外网镜像的几种方式 python | 鬼谷子数学问题 steam挂刀教程 linux | history 命令的格式化输出 shell | 将本地镜像批量推送到 harbor windows | hosts 文件修复 kubernetes | configmap & secret kubernetes | RBAC 鉴权和 NetworkPolicy kubernetes | service & ingress kubernetes | 存储 kubernetes | 滚动升级和自动伸缩 kubernetes | 控制器 kubernetes | 日志 kubernetes | 调度 kubernetes | pod kubernetes | 杂记 linux | set 命令详解 ceph | openeuler 部署 ceph-v16 ceph | ceph-v16 离线安装解决方案 pxe 如何应对复杂的服务器硬件环境 python | 批量修改目录下文件名 《微习惯》 ceph | openeuler (aarch64) 部署 ceph-v16 troubleshooting | glibc 误升级后修复 pxe 安装配置大全 《人间失格》 跑步日常 [置顶] Hello, hugo! shell | 检索某 url 中所有文件的内容 shell | 不同执行方式的区别 shell | 开启 debug 模式 vscode | 常见问题 windows & linux 多网卡时设置默认路由以及添加静态路由 mysql (二) 主从复制原理 GTID 并行复制 mysql (一) 部署 mysql | 杂记 cicd | jenkins 部署 mall-swarm 项目 httpd 源码打包编译成 rpm 包 openssl 源码打包编译成 rpm 包 centos7 | 修改网卡名称 ceph | pool pg_num 配置 docker | 脚本方式批量导出/导入镜像 centos 密码尝试次数过多问题处理 centos7 | 升级内核至 5.10 CVE-1999-0526 ceph | centos7 部署 ceph-v12 python | 修改 pip 源 troubleshooting | 安装 cloud-init 后导致 ssh 连接失败 windows | autohotkey 常用脚本
wsl | 自动更新系统代理
lvbibir · 2024-01-12 · via lvbibir's Blog

0 前言

目前我使用 wsl 过程中有以下两个场景需要使用到代理:

  • 场景一: 某些科学上网的场景, 比如 github 加速等
  • 场景二: 公司内网机器需要通过公司提供的代理上网

针对场景一, 可以通过将代理设置为 clash 或者其他客户端提供的端口, 如使用 clash 记得打开设置中的允许局域网

针对场景二, 直接设置公司提供的代理地址即可

1 配置代理

wsl 中添加如下脚本, 实现全局的系统代理, git 的 http(s) 代理和 ssh 代理, apt 代理, docker 镜像的代理按需开启, 使用国内的加速站也可

cat ~/proxy 

#!/bin/bash

# 提示用户必须使用 source 执行
if [ "$0" = "$BASH_SOURCE" ]; then
    echo "错误: 请使用 'source ~/proxy' 或 '. ~/proxy' 来执行此脚本"
    echo "直接执行无法设置当前 shell 的环境变量和 alias"
    exit 1
fi

# 使用 windows 主机上运行的代理程序, 例如 clash/mihomo
# wsl 中的地址是不固定的, 这里通过脚本获取, 每次启动 wsl 都可以实时更新

proxy_type="http"
proxy_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
proxy_port="7890"

proxy="${proxy_type}://${proxy_ip}:${proxy_port}"

# 系统全局代理
export ALL_PROXY="${proxy}"
export all_proxy="${proxy}"
export http_proxy="${proxy}"
export https_proxy="${proxy}"

# docker 代理
# 只在配置变化时才更新并重启 docker
docker_config=$(cat <<- EOF
{
  "proxies": {
    "http-proxy": "${proxy}",
    "https-proxy": "${proxy}",
    "no-proxy": "localhost,127.0.0.0/8"
  }
}
EOF
)

current_config=""
if [ -f /etc/docker/daemon.json ]; then
    current_config=$(sudo cat /etc/docker/daemon.json 2>/dev/null)
fi

if [ "$docker_config" != "$current_config" ]; then
    echo "$docker_config" | sudo tee /etc/docker/daemon.json > /dev/null
    sudo systemctl reset-failed docker 2>/dev/null
    sudo systemctl restart docker
fi

# apt 代理
# 如果不加 sudo, 会导致用 sudo 执行 apt 等命令时无法识别 alias
alias sudo='sudo '
alias apt="apt -o Acquire::http::proxy=${proxy}"
alias apt-get="apt-get -o Acquire::http::proxy=${proxy}"

# git 的 http/s 代理
git config --global http.https://github.com.proxy ${proxy}
git config --global https.https://github.com.proxy ${proxy}

# git 的 ssh 代理
tee ~/.ssh/config > /dev/null <<- EOF

# Git-bash: ProxyCommand "C:\\APP\\Git\\mingw64\\bin\\connect" -S ${proxy_ip}:${proxy_port} -a none %h %p
# Centos7 : ProxyCommand ncat --proxy ${proxy_ip}:${proxy_port} --proxy-type ${proxy_type} %h %p
# Ubuntu  : ProxyCommand nc -v -x ${proxy_ip}:${proxy_port} %h %p

# 所有主机通用设置
Host *
  ProxyCommand nc -v -x ${proxy_ip}:${proxy_port} %h %p
  IdentityFile "~/.ssh/id_rsa"
  TCPKeepAlive yes
  GSSAPIAuthentication no
  PreferredAuthentications publickey,password
  ConnectTimeout 10
  ServerAliveInterval 60
  ServerAliveCountMax 3

Host github.com
  User git
  Port 22
  Hostname github.com

Host ssh.github.com
  User git
  Port 443
  Hostname ssh.github.com

Host lvbibir.cn
  User root
  Port 22
  Hostname 39.96.168.166

EOF

加入环境变量, 每次启动 wsl 自动设置 proxy

cat >> ~/.bashrc <<- 'EOF'
source ${HOME}/proxy
EOF

# 手动调用
source ~/proxy

2 取消代理

cat ~/proxy-unset

#!/bin/bash

# 提示用户必须使用 source 执行
if [ "$0" = "$BASH_SOURCE" ]; then
    echo "错误: 请使用 'source ~/proxy-unset' 或 '. ~/proxy-unset' 来执行此脚本"
    echo "直接执行无法清除当前 shell 的环境变量和 alias"
    exit 1
fi

# 清除系统全局代理环境变量
unset ALL_PROXY
unset all_proxy
unset http_proxy
unset https_proxy

# docker 代理清除
# 恢复到无代理的基础配置
docker_config=$(cat <<- EOF
{
  "insecure-registries" : ["http://11.14.1.40"]
}
EOF
)

current_config=""
if [ -f /etc/docker/daemon.json ]; then
    current_config=$(sudo cat /etc/docker/daemon.json 2>/dev/null)
fi

if [ "$docker_config" != "$current_config" ]; then
    echo "$docker_config" | sudo tee /etc/docker/daemon.json > /dev/null
    sudo systemctl reset-failed docker 2>/dev/null
    sudo systemctl restart docker
    echo "Docker 代理配置已清除并重启"
fi

# 清除 apt 代理 alias
unalias sudo 2>/dev/null
unalias apt 2>/dev/null
unalias apt-get 2>/dev/null

# 清除 git 的 http/https 代理
git config --global --unset http.https://github.com.proxy 2>/dev/null
git config --global --unset https.https://github.com.proxy 2>/dev/null

# 恢复 SSH 配置为无代理状态
tee ~/.ssh/config > /dev/null <<- EOF

# Git-bash: ProxyCommand "C:\APP\Git\mingw64\bin\connect" -S 172.29.208.1:7890 -a none %h %p
# Centos7 : ProxyCommand ncat --proxy 172.29.208.1:7890 --proxy-type http %h %p
# Ubuntu  : ProxyCommand nc -v -x 172.29.208.1:7890 -X http %h %p

# 所有主机通用设置 (无代理)
Host *
  IdentityFile "/home/lvbibir/.ssh/id_rsa"
  TCPKeepAlive yes
  GSSAPIAuthentication no
  PreferredAuthentications publickey,password
  ConnectTimeout 10
  ServerAliveInterval 60
  ServerAliveCountMax 3

Host github.com
  User git
  Port 22
  Hostname github.com

Host ssh.github.com
  User git
  Port 443
  Hostname ssh.github.com

Host lvbibir.cn
  User root
  Port 22
  Hostname 39.96.168.166

EOF

echo "代理配置已完全清除 (当前 shell 会话)"
echo "注意: 新开的 shell 会话仍会通过 .bashrc 等配置文件加载 proxy"
echo "SSH 配置已恢复为无代理状态"

以上

wechat_pay

微信

alipay

支付宝