From 8861d81371034c8d87b6a4bba9f8996549a5ddf7 Mon Sep 17 00:00:00 2001 From: Houzhong Xu Date: Sat, 20 Sep 2025 17:31:03 +0000 Subject: [PATCH] Add proxy toggle script for easy proxy management - Add proxy-toggle.sh script with full proxy control functionality - Support temporary and permanent proxy enable/disable - Add proxy status checking and connection testing - Include convenient aliases: proxy-on, proxy-off, proxy-toggle, etc. - Automatic IP display when switching proxy states - Configuration file management for persistent proxy settings --- .../zsh/oh-my-zsh-custom/aliases.zsh | 9 + scripts/utilities/proxy-toggle.sh | 304 ++++++++++++++++++ 2 files changed, 313 insertions(+) create mode 100755 scripts/utilities/proxy-toggle.sh diff --git a/configuration/zsh/oh-my-zsh-custom/aliases.zsh b/configuration/zsh/oh-my-zsh-custom/aliases.zsh index a8a9c6a..80097c4 100644 --- a/configuration/zsh/oh-my-zsh-custom/aliases.zsh +++ b/configuration/zsh/oh-my-zsh-custom/aliases.zsh @@ -240,3 +240,12 @@ alias users='users' alias w='w' alias who='who' alias last='last -n 10' + +# Proxy Management +alias proxy-on='/root/mgmt/scripts/utilities/proxy-toggle.sh on' +alias proxy-off='/root/mgmt/scripts/utilities/proxy-toggle.sh off' +alias proxy-toggle='/root/mgmt/scripts/utilities/proxy-toggle.sh toggle' +alias proxy-enable='/root/mgmt/scripts/utilities/proxy-toggle.sh enable' +alias proxy-disable='/root/mgmt/scripts/utilities/proxy-toggle.sh disable' +alias proxy-status='/root/mgmt/scripts/utilities/proxy-toggle.sh status' +alias proxy-test='/root/mgmt/scripts/utilities/proxy-toggle.sh test' diff --git a/scripts/utilities/proxy-toggle.sh b/scripts/utilities/proxy-toggle.sh new file mode 100755 index 0000000..777b01c --- /dev/null +++ b/scripts/utilities/proxy-toggle.sh @@ -0,0 +1,304 @@ +#!/bin/bash + +# 代理开关脚本 +# 用于一键开启/关闭 istoreos.tailnet-68f9.ts.net:1082 代理 + +set -euo pipefail + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +# 代理配置 +PROXY_HOST="istoreos.tailnet-68f9.ts.net" +PROXY_PORT="1082" +PROXY_URL="http://${PROXY_HOST}:${PROXY_PORT}" + +# 配置文件路径 +PROXY_ENV_FILE="/root/mgmt/configuration/proxy.env" +SHELL_RC_FILE="$HOME/.zshrc" +BASH_RC_FILE="$HOME/.bashrc" + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 检查代理状态 +check_proxy_status() { + if [[ -n "${http_proxy:-}" ]] || [[ -n "${HTTP_PROXY:-}" ]]; then + echo "on" + else + echo "off" + fi +} + +# 测试代理连接 +test_proxy() { + log_info "测试代理连接..." + if curl -s --connect-timeout 5 --proxy "$PROXY_URL" https://httpbin.org/ip >/dev/null 2>&1; then + log_success "代理连接正常" + return 0 + else + log_error "代理连接失败" + return 1 + fi +} + +# 开启代理 +enable_proxy() { + log_info "开启代理..." + + # 设置环境变量 + export http_proxy="$PROXY_URL" + export https_proxy="$PROXY_URL" + export HTTP_PROXY="$PROXY_URL" + export HTTPS_PROXY="$PROXY_URL" + export no_proxy="localhost,127.0.0.1,::1,.local,.tailnet-68f9.ts.net" + export NO_PROXY="localhost,127.0.0.1,::1,.local,.tailnet-68f9.ts.net" + export ALL_PROXY="$PROXY_URL" + export all_proxy="$PROXY_URL" + + # 测试连接 + if test_proxy; then + log_success "代理已开启: $PROXY_URL" + + # 显示当前IP + local current_ip=$(curl -s --connect-timeout 5 --proxy "$PROXY_URL" https://httpbin.org/ip | jq -r .origin 2>/dev/null || echo "未知") + log_info "当前IP: $current_ip" + + return 0 + else + log_error "代理开启失败" + return 1 + fi +} + +# 关闭代理 +disable_proxy() { + log_info "关闭代理..." + + # 清除环境变量 + unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY + unset no_proxy NO_PROXY ALL_PROXY all_proxy + + log_success "代理已关闭" + + # 显示当前IP + local current_ip=$(curl -s --connect-timeout 5 https://httpbin.org/ip | jq -r .origin 2>/dev/null || echo "未知") + log_info "当前IP: $current_ip" +} + +# 切换代理状态 +toggle_proxy() { + local current_status=$(check_proxy_status) + + if [[ "$current_status" == "on" ]]; then + disable_proxy + else + enable_proxy + fi +} + +# 永久开启代理(写入配置文件) +enable_proxy_permanent() { + log_info "永久开启代理..." + + # 创建代理环境文件 + cat > "$PROXY_ENV_FILE" << EOF +# Proxy Configuration for ${PROXY_HOST}:${PROXY_PORT} +# This file contains proxy environment variables for the management system + +# HTTP/HTTPS Proxy Settings +export http_proxy=${PROXY_URL} +export https_proxy=${PROXY_URL} +export HTTP_PROXY=${PROXY_URL} +export HTTPS_PROXY=${PROXY_URL} + +# No Proxy Settings (local networks and services) +export no_proxy=localhost,127.0.0.1,::1,.local,.tailnet-68f9.ts.net +export NO_PROXY=localhost,127.0.0.1,::1,.local,.tailnet-68f9.ts.net + +# Additional proxy settings for various tools +export ALL_PROXY=${PROXY_URL} +export all_proxy=${PROXY_URL} + +# Docker proxy settings +export DOCKER_BUILDKIT=1 +export BUILDKIT_PROGRESS=plain + +# Git proxy settings +export GIT_HTTP_PROXY=${PROXY_URL} +export GIT_HTTPS_PROXY=${PROXY_URL} + +# Curl proxy settings +export CURL_PROXY=${PROXY_URL} + +# Wget proxy settings +export WGET_PROXY=${PROXY_URL} +EOF + + # 在 shell 配置文件中加载代理配置 + local shell_files=("$SHELL_RC_FILE" "$BASH_RC_FILE") + + for shell_file in "${shell_files[@]}"; do + if [[ -f "$shell_file" ]]; then + # 检查是否已经加载了代理配置 + if ! grep -q "source.*proxy.env" "$shell_file"; then + log_info "在 $shell_file 中添加代理配置加载..." + echo "" >> "$shell_file" + echo "# Load proxy configuration if exists" >> "$shell_file" + echo "if [[ -f $PROXY_ENV_FILE ]]; then" >> "$shell_file" + echo " source $PROXY_ENV_FILE" >> "$shell_file" + echo "fi" >> "$shell_file" + fi + fi + done + + # 立即加载配置 + if [[ -f "$PROXY_ENV_FILE" ]]; then + source "$PROXY_ENV_FILE" + fi + + if test_proxy; then + log_success "代理已永久开启" + log_info "配置已保存到: $PROXY_ENV_FILE" + log_info "请重新登录或运行: source ~/.zshrc" + else + log_error "代理永久开启失败" + return 1 + fi +} + +# 永久关闭代理(从配置文件移除) +disable_proxy_permanent() { + log_info "永久关闭代理..." + + # 备份现有配置 + if [[ -f "$PROXY_ENV_FILE" ]]; then + cp "$PROXY_ENV_FILE" "${PROXY_ENV_FILE}.backup.$(date +%Y%m%d_%H%M%S)" + rm -f "$PROXY_ENV_FILE" + fi + + # 从 shell 配置文件中移除代理配置加载 + local shell_files=("$SHELL_RC_FILE" "$BASH_RC_FILE") + + for shell_file in "${shell_files[@]}"; do + if [[ -f "$shell_file" ]]; then + # 移除代理配置加载行 + if grep -q "source.*proxy.env" "$shell_file"; then + log_info "从 $shell_file 中移除代理配置加载..." + sed -i '/# Load proxy configuration if exists/,/^fi$/d' "$shell_file" + fi + fi + done + + # 立即清除环境变量 + disable_proxy + + log_success "代理已永久关闭" + log_info "请重新登录或运行: source ~/.zshrc" +} + +# 显示代理状态 +show_status() { + local current_status=$(check_proxy_status) + + echo "" + log_info "=== 代理状态 ===" + + if [[ "$current_status" == "on" ]]; then + log_success "代理状态: 开启" + log_info "代理地址: $PROXY_URL" + + # 显示当前IP + local current_ip=$(curl -s --connect-timeout 5 --proxy "$PROXY_URL" https://httpbin.org/ip | jq -r .origin 2>/dev/null || echo "未知") + log_info "当前IP: $current_ip" + else + log_warning "代理状态: 关闭" + + # 显示当前IP + local current_ip=$(curl -s --connect-timeout 5 https://httpbin.org/ip | jq -r .origin 2>/dev/null || echo "未知") + log_info "当前IP: $current_ip" + fi + + # 检查配置文件状态 + if [[ -f "$PROXY_ENV_FILE" ]]; then + log_info "配置文件: 存在 ($PROXY_ENV_FILE)" + else + log_info "配置文件: 不存在" + fi + + echo "" +} + +# 显示帮助信息 +show_help() { + echo "代理开关脚本 - 管理 istoreos.tailnet-68f9.ts.net:1082 代理" + echo "" + echo "用法: $0 [命令]" + echo "" + echo "命令:" + echo " on - 临时开启代理(仅当前会话)" + echo " off - 临时关闭代理(仅当前会话)" + echo " toggle - 切换代理状态" + echo " enable - 永久开启代理(写入配置文件)" + echo " disable - 永久关闭代理(从配置文件移除)" + echo " status - 显示代理状态" + echo " test - 测试代理连接" + echo " help - 显示此帮助信息" + echo "" + echo "示例:" + echo " $0 on # 临时开启代理" + echo " $0 enable # 永久开启代理" + echo " $0 status # 查看代理状态" + echo " $0 toggle # 切换代理状态" + echo "" +} + +# 主函数 +main() { + case "${1:-help}" in + "on") + enable_proxy + ;; + "off") + disable_proxy + ;; + "toggle") + toggle_proxy + ;; + "enable") + enable_proxy_permanent + ;; + "disable") + disable_proxy_permanent + ;; + "status") + show_status + ;; + "test") + test_proxy + ;; + "help"|*) + show_help + ;; + esac +} + +main "$@"